자식 버전 제어를 사용하여 파일의 권한 만 업데이트하고 커밋


187

그냥 설정 some.sh실행 (로 파일을 chmod 755 ...) 권한은 콘텐츠를 업데이트하지만되었다. 파일을 git 에 커밋 하여 실행 파일이 clone / checkout / pull 에서 복원 / 설정되도록 할 수 있습니까?

업데이트 : 새 권한이 제출되었음을 어떻게 추적 github합니까?

답변:


190

기본적으로 git은 파일 실행 권한을 변경하면 업데이트합니다. 다른 권한은 변경하거나 추적하지 않습니다.

실행 권한을 수정할 때 변경 사항이 표시되지 않으면 파일 모드를 무시하는 구성이 git에있을 수 있습니다.

파일 의 .git폴더 에서 프로젝트 config를 살펴보면 다음과 같은 내용이 표시됩니다.

[core]
    filemode = false

true선호하는 텍스트 편집기에서로 변경 하거나 다음을 실행할 수 있습니다.

git config core.filemode true

그런 다음 파일을 정상적으로 커밋 할 수 있어야합니다. 권한 변경 만 커밋합니다.


감사합니다! 권한 변경 사항이 제출되었음을 어떻게 추적 github합니까?
BreakPhreak

2
파일을 볼 때 볼 수 있습니다 (예 : Rails gitignore file 에서는 파일 권한으로 100644를 찾을 수 있습니다)
Vincent B.

8
(실제로 파일의 권한을 변경하고 커밋) 자식으로 Windows에서 사용 권한 변경 : blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html
fooMonster

39
이 답변은 잘못되었습니다! Git은 파일이 실행 가능한지 여부 만 추적합니다. 쓰기 가능 또는 읽기 가능과 같은 다른 파일 권한은 추적하지 않습니다. 자세한 내용은 stackoverflow.com/a/11231682/2311074 를 참조하십시오.
Adam

나를 위해 웹 스톰은 변화를 포착하지 못했지만 git status, 나는 변화를 본다.
Townsheriff

193

@ fooMonster 기사가 나를 위해 일했습니다.

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

보시다시피 파일에는 644 권한이 있습니다 (100은 무시). 755로 변경하고 싶습니다 :

# git update-index --chmod=+x script.sh

변화를 저 지르다

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

7
실제로 '-x / + x'를 사용해야합니다. 다른 권한이나 비트 마스크를 설정할 수 없습니다.
Devolus

사용하여 git commit -a나를 위해 아무것도하지 않았다, 그러나 명령 줄에 메시지를 설정 않았다.
기발한

명령 순서는 다음과 같아야합니다. # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin

30

나를 위해 작동하지 않습니다.

모드가 true이고 파일 권한이 변경되었지만 git은 할 일이 없다고 말합니다.

git init
git add dir/file
chmod 440 dir/file
git commit -a

문제는 git이 특정 권한 변경 만 인식한다는 것입니다.


51
맞음- git실제로 파일이 실행 가능한지 아닌지 전체 * nix 권한 세트 만 추적합니다. 커밋할만한 무언가를 바꾸 었다고 생각하기 위해 실행 파일간에 파일을 전환해야합니다.
twalberg

명확한 문서를 찾을 수 없었습니다. 그에 따라 파마를 설정하기 위해 어떤 사후 조치 트리거를 사용할 수 있습니까?
Otheus

2
글쎄, 일부 경우를 다루는 post-checkout후크가 git있지만 작업 트리에서 파일을 업데이트하는 가능한 모든 항목을 다루는 지 확실하지 않습니다. 리포지토리에 추가 셸 스크립트를 추가하는 것이 좋습니다. 또는 git메타 데이터를 저장 하는 기능을 보강하는 몇 가지 프로젝트가 있지만 실제로 시도한 적이 없습니다 ...
twalberg

1
파일 권한을 777로 변경하고 변경 git update-index --refresh했지만 diff가 표시 old mode 100644 new mode 100755됩니다. 그것은 모든 권한이 업데이트되지 않았습니다
hudac

@tishma answer here stackoverflow.com/questions/14557106/…을 참조하십시오 . 이것은 나를 위해 일한 것입니다
gary69
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.