2010-07-20 10 views
52

나는 전체 트리의 권한을 절대적으로 변경하고 다른 내용을 변경하여 변경 내용 만 커밋합니다.git diff에서 권한 변경을 무시하도록 할 수 있습니까?

내가 같은 것을 사용 : 두 태그 사이에 수정 된 파일이있는 타르를 생성하는

tar -czf deploy.tar git diff --name-only v1 v2

을, 문제는 지금 때문에 권한의 수정 된 거의 모든 나의 나무가 목록에 변경하는 것이 있습니다.

git diff에게 권한이 변경된 파일 만 무시할 수있는 방법이 있습니까?

+3

가능한 복제본 [어떻게하면 자식 모드 변경 (chmod)을 무시합니까?] (http://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod)) – Leonel

답변

115

이 권한을 무시하고 자식을 말할 것이다 :

git config core.filemode false 
+2

아마도 이것은 변경된 권한을 가진 파일을 커밋에 추가하는 것을 막을 수 있지만, 내 경우에는 파일이 커밋되고 푸시되고 태그가 지정되며 사용자가 제안한 명령이 도움이되지 않습니다. 나는 bit 스크립트를 만들어서 git diff의 출력을 파싱하여 모드 변경에 관한 라인을 제거하고 결과를 tar에 공급해야 할 것이라고 생각한다. 어떤 아이디어라도 환영받습니다. – Cesar

+0

@Cesar :이 명령은 git에게 색인과 작업 사본 사이의 권한 차이를 무시하도록 명령합니다. 그게 네가 원하는거야? –

+0

나는 새로운 git에 익숙하지만, 차이점은 커밋간에 차이가 있다는 것이다. 내가 힘내 diff tag1 tag2 할 때, 내가 수정 된 내용을 가진 파일 이외의 사용 권한을 변경 한 모든 파일을 보여줍니다, 나는 그 모든 '모드 변경을 무시하는 방법을 찾으려고합니다. 664 => 775', 나는 바랐다. 나 자신을 지우십시오 – Cesar

9

나는 의도적으로 소스 코드 파일 (~ 26K 파일)에서 실행 권한을 제거한 후이 문제를 가지고 있었다. 그렇다면 git diff는 모든 파일이 변경되었다고 말합니다. core.filemode의 대답은 작업 디렉토리에 대한 diff에만 영향을 주며 repo에있는 두 개의 커밋과는 다릅니다.

대답은 (큰 무서운) filter-branch 명령을 사용하는 것이 었습니다. 특히 입력 할 내용은 다음과 같습니다.

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all 

작업 디렉토리의 루트입니다. 물론 다시 시도해야 할 경우에 대비하여 repo를 먼저 만들어야합니다 (cp -pr ~/repo.git ~/repo-orig.git 또는 유사).

즐기십시오!

+1

흥미 롭습니다 (+1). 나는 내 대답에 http://stackoverflow.com/a/12979453/6309에 포함시켰다. (당신 자신의 대답이 삭제 되었기 때문에) – VonC

관련 문제