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 파일 권한 질문을 참조하십시오.
답변
두 커밋 에서이 작업을 수행 할 필요가 없습니다. 파일을 추가하고 단일 커밋에서 실행 파일로 표시 할 수 있습니다.
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
그리고 이제 우리는 단일 실행 파일을 가진 단일 커밋을 갖습니다.
답변
경우 실제로, 그것은 좋은 것
git-add
했다--mode
플래그를
git 2.9.x / 2.10 (Q3 2016)은 실제로 그것을 허용합니다 ( Edward Thomson 덕분에 ).
git add --chmod=+x -- afile
git commit -m"Executable!"
그러면 모든 프로세스가 더 빨라지고 core.filemode
false로 설정되어 있어도 작동합니다 .
Edward Thomson ( )의 commit 4e55ed3 (2016 년 5 월 31 일)을 참조하십시오 .
도움 : Johannes Schindelin ( ) . (의해 병합 Junio C 하마노 – – 에 커밋 c8b080a 06 7 월를 2016)ethomson
dscho
gitster
add
: 추가--chmod=+x
/--chmod=-x
옵션실행 가능 비트는
core.filemode
false 로 설정된 리포지토리의 경로에 대해 검색되지 않으므로 설정되지 않습니다 . 그러나 사용자는 여전히
기능 이 있는 다른 사용자와의 호환성을 위해 실행 파일로 파일을 추가 할 수core.filemode
있습니다.
예를 들어 셸 스크립트를 추가하는 Windows 사용자는 Windows 이외의 사용자와의 호환성을 위해 실행 가능 파일로 추가 할 수 있습니다.배관 명령 (
git update-index --add --chmod=+x foo
) 으로이 작업을 수행 할 수 있지만 명령을 가르치면git-add
사용자는 이미 익숙한 명령으로 파일 실행 파일을 설정할 수 있습니다 .
답변
파일에 이미 + x 플래그가 설정되어 git update-index --chmod=+x
있으면 아무것도하지 않고 git은 플래그가 저장소에 저장되지 않아도 커밋 할 것이 없다고 생각합니다.
먼저 플래그를 제거하고 git 명령을 실행 한 다음 플래그를 다시 넣어야합니다.
chmod -x <file>
git update-index --chmod=+x <file>
chmod +x <file>
그런 다음 git은 변경 사항을보고 변경 사항을 커밋 할 수 있습니다.
답변
메모는 당신이 확실해야한다 먼저입니다 filemode
에 세트 false
구성 자식 파일에서 또는 다음 명령을 사용합니다
git config core.filemode false
다음 명령으로 0777 권한을 설정할 수 있습니다.
git update-index --chmod=+x foo.sh
답변
나는 더없는 touch
및 chmod
내 cmd.exe를에 명령을하고 git update-index --chmod=+x foo.sh
나를 위해 작동하지 않습니다.
마지막으로 skip-worktree
비트 를 설정하여 해결합니다 .
git update-index --skip-worktree --chmod=+x foo.sh