GIT에서 파일에 chmod 권한을 추가하는 방법은 무엇입니까? 동일한 파일을 체크

.sh 파일을 git commit하고 싶지만 다른 서버에서 동일한 파일을 체크 아웃 할 때 실행 가능하게 만들고 싶습니다.

파일을 체크 아웃하는 서버에서 해당 파일을 수동으로 chmod u + x하지 않고 그렇게 할 수 있습니까?



답변

공식 문서 에 따르면 update-index하위 명령을 사용하여 추적 된 파일에서 “실행 가능”플래그를 설정하거나 제거 할 수 있습니다 .

플래그를 설정하려면 다음 명령을 사용하십시오.

git update-index --chmod=+x path/to/file

제거하려면 다음을 사용하십시오.

git update-index --chmod=-x path/to/file

후드

이것은 일반적인 유닉스 파일 권한 시스템처럼 보이지만 실제로는 그렇지 않습니다. Git은 내부 저장소에있는 각 파일에 대해 특별한 “모드”를 유지합니다.

  • 100644 일반 파일
  • 100755 실행 가능한 것들

옵션 ls-file과 함께 부속 명령 을 사용하여이를 시각화 할 수 있습니다 --stage.

$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0       .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0       my_executable_script.sh

기본적으로 저장소에 파일을 추가하면 Git은 파일 시스템 속성을 존중하고 그에 따라 올바른 파일 모드를 설정하려고 시도합니다. core.fileModeoption을 false 로 설정 하여 이를 비활성화 할 수 있습니다 .

git config core.fileMode false

문제 해결

Git 파일 모드가 설정되지 않았지만 파일에 올바른 파일 시스템 플래그가있는 경우 모드를 제거하고 다시 설정하십시오.

git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file

보너스

Git 2.9부터는 파일을 스테이징하고 하나의 명령으로 플래그를 설정할 수 있습니다.

git add --chmod=+x path/to/file

답변

Antwane의 대답 은 맞습니다. 이것은 주석이어야하지만 주석에는 공간이 충분하지 않으며 형식을 지정할 수 없습니다. 🙂 Git에서 파일 권한은 1 또는 (맞춤법 ( 및 ; 부분은 “일반 파일”을 의미) 으로 기록 됩니다 .644755100644100755100

diff --git a/path b/path
new file mode 100644

전자 (644)는 파일이 실행 가능 하지 않아야하고 후자는 파일이 실행 가능 해야 함을 의미합니다 . 파일 시스템 내에서 실제 파일 모드로 전환되는 방법은 다소 OS에 따라 다릅니다. 유닉스 계열 시스템에서 비트는 umask일반적으로 022“group”및 “other”에서 002쓰기 권한을 제거 하거나 “other”에서만 쓰기 권한을 제거 하는 설정을 통해 전달됩니다 . 077개인 정보 보호에 특히 관심이 있고 “그룹”및 “기타”둘 다에서 읽기, 쓰기 및 실행 권한을 제거하려는 경우 에도 해당 될 수 있습니다 .


1 초기 버전의 Git은 그룹 권한을 저장하므로 일부 리포지토리에는 모드가있는 트리 항목이 664있습니다. 현대의 Git은 변경되지 않지만 어떤 객체도 변경할 수 없기 때문에 오래된 권한 비트는 여전히 오래된 트리 객체에 유지됩니다.

0644 또는 0755 만 저장하도록 변경되었습니다. 한 것은 e44794706eeb57f2로 , Git v0.99 이전이며 2005 년 4 월 16 일자입니다.