Windows의 Git에서 파일 실행 모드 권한을 만드는 방법은 무엇입니까?


378

Windows에서 Git을 사용하고 한 번의 커밋으로 실행 가능 쉘 스크립트를 git repo로 푸시하려고합니다.

일반적으로 두 단계 ( git commit) 를 수행해야합니다 .

$ vi install.sh
$ git add install.sh  
$ git commit -am "add new file for installation" # first commit
[master f2e92da] add support for install.sh
 1 files changed, 18 insertions(+), 3 deletions(-)
 create mode 100644 install.sh
$ git update-index --chmod=+x install.sh
$ git commit -am "update file permission"        # second commit
[master 317ba0c] update file permission
  0 files changed
  mode change 100644 => 100755 install.sh

이 두 단계를 한 단계로 결합하려면 어떻게해야합니까? 자식 구성? 윈도우 명령?

알림 : 두 가지 대답이 좋으며 git add --chmod=+x file새로운 자식 버전에서 지원됩니다.

참조 : 두 번째 커밋 에 대한 Windows의 Git 파일 권한 질문을 참조하십시오.


10
git 2.9.x / 2.10 (Q3 2016)을 사용하면 git add --chmod=+x실제로 가능합니다. 보기 내 대답은 아래 에 신용 에드워드 톰슨 .
VonC

5
선택한 답변을 git add --chmod=+x버전으로 업데이트하는 것이
좋습니다.

답변:


590

두 커밋 에서이 작업을 수행 할 필요가 없습니다. 파일을 추가하고 단일 커밋에서 실행 파일로 표시 할 수 있습니다.

C:\Temp\TestRepo>touch foo.sh

C:\Temp\TestRepo>git add foo.sh

C:\Temp\TestRepo>git ls-files --stage
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

참고로, 추가 후 모드는 0644입니다 (즉, 실행 가능하지 않음). 그러나 커밋하기 전에 실행 파일로 표시 할 수 있습니다.

C:\Temp\TestRepo>git update-index --chmod=+x foo.sh

C:\Temp\TestRepo>git ls-files --stage
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

이제 파일은 모드 0755 (실행 가능)입니다.

C:\Temp\TestRepo>git commit -m"Executable!"
[master (root-commit) 1f7a57a] Executable!
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100755 foo.sh

그리고 이제 우리는 단일 실행 파일을 가진 단일 커밋을 갖습니다.


147

경우 실제로, 그것은 좋은 것 git-add했다 --mode플래그를

git 2.9.x / 2.10 (Q3 2016)은 실제로 그것을 허용합니다 ( Edward Thomson 덕분에 ).

git add --chmod=+x -- afile
git commit -m"Executable!"

그러면 모든 프로세스가 더 빨라지고 core.filemodefalse로 설정되어 있어도 작동합니다 .

Edward Thomson ( )의 commit 4e55ed3 (2016 년 5 월 31 일)을 참조하십시오 . 도움 : Johannes Schindelin ( ) . (의해 병합 Junio C 하마노 - -커밋 c8b080a 06 7 월를 2016)ethomson
dscho
gitster

add: 추가 --chmod=+x/ --chmod=-x옵션

실행 가능 비트는 core.filemodefalse 로 설정된 리포지토리의 경로에 대해 검색되지 않으므로 설정되지 않습니다 . 그러나 사용자는 여전히 기능 있는 다른 사용자와의 호환성을 위해 실행 파일로 파일을 추가 core.filemode있습니다.
예를 들어 셸 스크립트를 추가하는 Windows 사용자는 Windows 이외의 사용자와의 호환성을 위해 실행 가능 파일로 추가 할 수 있습니다.

배관 명령 ( git update-index --add --chmod=+x foo) 으로이 작업을 수행 할 수 있지만 명령을 가르치면 git-add사용자는 이미 익숙한 명령으로 파일 실행 파일을 설정할 수 있습니다 .


22

파일에 이미 + x 플래그가 설정되어 git update-index --chmod=+x있으면 아무것도하지 않고 git은 플래그가 저장소에 저장되지 않아도 커밋 할 것이 없다고 생각합니다.

먼저 플래그를 제거하고 git 명령을 실행 한 다음 플래그를 다시 넣어야합니다.

chmod -x <file>
git update-index --chmod=+x <file>
chmod +x <file>

그런 다음 git은 변경 사항을보고 변경 사항을 커밋 할 수 있습니다.


9

메모는 당신이 확실해야한다 먼저입니다 filemode에 세트 false구성 자식 파일에서 또는 다음 명령을 사용합니다

git config core.filemode false

다음 명령으로 0777 권한을 설정할 수 있습니다.

git update-index --chmod=+x foo.sh

3

나는 더없는 touchchmod내 cmd.exe를에 명령을하고 git update-index --chmod=+x foo.sh나를 위해 작동하지 않습니다.

마지막으로 skip-worktree비트 를 설정하여 해결합니다 .

git update-index --skip-worktree --chmod=+x foo.sh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.