Windows에서 Git 파일 권한


172

Git의 파일 권한에 관한 몇 가지 질문을 읽었으며 여전히 약간 혼란 스럽습니다. GitHub에 대한 저장소가 다른 곳에서 분기되었습니다. 병합 후, 동일해야합니다. 하나:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

파일 권한을 변경하려고 시도했지만 diff 결과는 변경되지 않습니다.

답변:


346

내가 여기에 윈도우에 (도) 권한을 변경하는 방법의 해결책을 발견 : http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

예를 들어 다음 명령은 사용자 실행 권한을 임의의 파일에 추가합니다.

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

6
+1 : Windows에서 커밋 한 셸 스크립트 (로 core.filemode설정 한 위치 false)에 실제로 실행 비트 가 설정되어 있는지 확인하는 데 필요한 것
tomlogic

제 경우에는 파일에 새로운 줄을 추가 한 후에 만 ​​커밋 할 수있었습니다
oshai

5
Windows에서는 git-bash를 사용하여 --add어떤 이유로 실행에 대한 플래그가 필요했습니다 git update-index --add --chmod=+x <file>. 이 후, 파일은 chmod를 무대에 이미
제퍼슨 Quesado

git bash 나 cmd.exe 프롬프트에서 더 이상 효과가 없습니다.

107

스택 오버 플로우 에 대한 또 다른 질문에서 Git이 파일 모드 (chmod) 변경을 무시하도록하려면 어떻게합니까?

시험:

git config core.filemode false

에서 자식-설정 (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

감사. 나도 봤어 그것을 시도하고 아무런 차이가 없었다.
Synesso

3
OP와 비슷한 문제가 있었고 hard재설정 방법에 관계없이 변경 사항을 가져올 수 없었습니다 . 이것은 나를 위해 속임수를했다.
Jo-Herman Haugholt

11
[project] /. git / config는 동일한 설정을 포함 할 수 있으며 ~ / .gitconfig를 무시합니다. 전역으로 설정하려는 경우 로컬로 재정의되지 않아야합니다.
Binary Phile

1
슬프게도 NTFS에서도 이것이 필요하다는 것을 알았습니다.
Marc.2377

1
그게 답입니다!
Andrew Surdu

29

Git Bash를위한 편리한 원 라이너 :

find . -name '*.sh' | xargs git update-index --chmod=+x

모든 .sh파일을 실행 파일로 표시합니다 . 그 후, 당신은 단지해야합니다 git commit.


2
@ benoit-blanchon one-liner에 대한 작은 수정 ... .sh는 인용해야합니다. 찾기 . -name ' .sh'| xargs는 자식 업데이트 인덱스 --chmod = + X
스티븐 쉽게 즐겁게

당신이 맞아요, 나는 대답을 편집했습니다. 감사합니다 @SteventheEasilyAmused.
Benoit Blanchon

15

Cygwin git (또는 Linux git도 사용한다고 가정)을 사용하면 $ projdir / .git / config의 프로젝트 수준에서 core.filemode 설정이 설정되었을 가능성이 큽니다. Cygwin git과 Windows git이 항상 존재하지 않는 파일 모드 변경없이 Windows 파일 시스템에서 공존하기 위해서는 다음을 수행해야한다는 것을 알았습니다.

  • $ projdir / .git / config에서 행 설정 core.filemode를 삭제하십시오.
  • Windows git에서 "git config --global core.filemode false"를 실행하십시오.

이를 통해 Cygwin git은 일반적으로 관련된 파일 모드 변경 사항을 계속 볼 수 있지만 Windows git에 표시되는 파일 모드 변경 사항을 무시하도록 지시합니다.


6

먼저 아래 명령을 사용하여 파일 권한을 확인하십시오.

git ls-files --stage

그런 다음 권한을 변경하십시오. 여기서 "x"는 실행 권한을 나타냅니다.

git update-index --chmod=+x 'scriptname.ext'

이제 권한을 다시 확인하십시오.

git ls 파일 --stage

================================================

Windows PC를 사용하지만 Linux 시스템에 배포하는 경우 리눅스 컴퓨터에서 실행할 수 있도록 먼저 아래 명령을 실행하십시오.

dos2unix scriptname.ext scriptname.ext


같은 것을 할 수있는 방법이 git update-index --chmod=1777 'scriptname.ext'없습니까?
Alex Barker

스크립트 파일이 존재하는 경로로 이동 했습니까? @ 알렉스
Sireesh Yarlagadda

5

우분투, 커밋, 푸시 및 모두에서 파일 권한을 변경하여 문제를 해결했습니다. Windows / NTFS의 msysgit에서는 작동하지 않는 것 같습니다.


창문에 GitHub를 추천합니다. Wonderfull 인터페이스와 정말 멋진 쉘, 심지어 ssh 키 설정 및 git flow 설치를 비교적 쉽게 만들었습니다.
Sangoku
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.