.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.fileMode
option을 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 또는 (맞춤법 ( 및 ; 부분은 “일반 파일”을 의미) 으로 만 기록 됩니다 .644
755
100644
100755
100
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 일자입니다.