어떻게 파일 (.json)이 자식 훅으로 커밋되지 않도록 할 수 있습니까?어떻게 파일 (.json)이 자식 훅으로 커밋되지 않도록 할 수 있습니까?
서버에 아직 .json이 있습니다. 그래서 나는 gitignore를 사용할 수 없다. 하지만 지금은 누군가가이 파일을 변경하는 것을 허용하고 싶지 않습니다. 로컬 후크를 사용하고 싶습니다.
어떻게 커밋에서 특수 파일을 가져올 수 있습니까?
이 방법을 알려주십시오.
도움 주셔서 감사합니다.
어떻게 파일 (.json)이 자식 훅으로 커밋되지 않도록 할 수 있습니까?어떻게 파일 (.json)이 자식 훅으로 커밋되지 않도록 할 수 있습니까?
서버에 아직 .json이 있습니다. 그래서 나는 gitignore를 사용할 수 없다. 하지만 지금은 누군가가이 파일을 변경하는 것을 허용하고 싶지 않습니다. 로컬 후크를 사용하고 싶습니다.
어떻게 커밋에서 특수 파일을 가져올 수 있습니까?
이 방법을 알려주십시오.
도움 주셔서 감사합니다.
pre-commit
샘플 : 최선을 다하고 될 예정
#!/bin/bash
ipath="foo/bar.json"
git diff --cached --name-only | if grep -qE "^$ipath$";then
git reset HEAD -- "$ipath"
echo "Warning: $ipath is removed from the index. It's not allowed to be committed."
fi
git diff --cached --name-only
목록의 모든 변경된 파일. 목록에 foo/bar.json
이 있으면 git reset HEAD -- foo/bar.json
은 인덱스에서 제거하여 커밋되지는 않지만 작업 트리에 남겨 둡니다.
잘 작동합니다. 그러나 당신은 다른 사람들에게 그것을 보장 할 수는 없습니다. 예를 들어, 다른 참여자는 로컬 저장소에서 해당 기여자를 삭제할 수 있습니다. 필요한 것은 서버 저장소에있는 pre-receive
훅입니다. 들어오는 커밋이 foo/bar.json
을 터치하면 밀어 넣기를 거부합니다.
pre-receive
샘플 :
#!/bin/bash
ipath="foo/bar.json"
zero="0000000000000000000000000000000000000000"
while read old new name;do
if [ "$zero" == "$old" ];then
#creating new ref, do something here
continue
fi
if [ "$zero" == "$new" ];then
#deleting a ref, do something here
continue
fi
#updating a ref, check if the incoming commits touch `foo/bar.json`
git diff $old..$new --name-only | if grep -qE "^$ipath$";then
c=$(git log $old..$new --pretty=%H -- $ipath)
echo "Error: $ipath is changed in:"
echo $c
echo "Error: $ipath is not allowed to be committed and pushed."
exit 1
fi
done
공헌자는 git push
후 오류 메시지가 나타납니다. 다른 커밋을 시도하기 전에 커밋을 수정하고 foo/bar.json
의 변경 사항을 제거해야합니다. pre-receive
에서 필요한 경우 deleting a ref
및 creating a ref
을 처리해야합니다.
고마워요! 문제는 서버 측에서 지원하지 않는다는 것입니다. 그래서 나는 그것을 지역적으로해야만한다. 그러나 첫번째 부분은 나에게 그것을 로컬로 바로 할 것인가? – Coder949
자동 생성 된 파일이나 코드 파일이 커밋되지 않도록 하시겠습니까? – LethalProgrammer
설명하기가 조금 복잡합니다. 나는 특수 파일이 커밋 될지 확인하고 파일이 커밋에있는 경우 커밋을 중단하기를 원합니다. – Coder949
예 가능합니다. 커밋하는 동안 트리거되는 pre-commit 훅 규칙을 작성하여 존재할 경우 파일을 제거한 다음 커밋합니다. – LethalProgrammer