반응형

Git을 어떻게 무시하도록 어떻게합니까? (chmod) 변경 사항이 변경됩니까?


질문

 

개발 중에 chmod로 파일 모드를 변경해야하지만 메인 repo에서 변경하지 않아야하는 프로젝트가 있습니다.

Git은 chmod -r 777에서 픽업합니다.모든 파일을 변경된대로 표시합니다.파일에 대한 Git 무시 모드 변경을 만들 수있는 방법이 있습니까?


답변

 

노력하다:

git config core.fileMode false

git-config (1)에서 :

Core.FileMode. 작업 트리의 파일 실행 비트가있는 경우 GIT에게 알려줍니다. 존경받을 것입니다. 일부 파일 시스템은 파일이있는 파일을 잃을 수 있습니다. 실행 파일이 체크 아웃되거나 확인 된 것으로 표시됩니다. 실행 가능한 비트가있는 실행 불가능한 파일.git-clone (1) 또는 git-init (1) 파일 시스템이 파일 시스템을 처리하는지 확인하십시오. 실행 가능한 비트가 올바르게 그리고이 변수가 자동으로됩니다 필요에 따라 설정하십시오. 그러나 저장소는 핸들을 처리하는 파일 시스템에있을 수 있습니다. FileMode가 올바르게,이 변수는 언제 true로 설정됩니다. 만들었지 만 나중에 다른 곳에서 액세스 할 수 있습니다. FileMode를 잃는 환경 (예 : Ext4. CIFS 마운트를 통해 Cygwin을 방문하여 GIT로 생성 된 저장소를 방문합니다. Windows 또는 Eclipse 용).그런 경우에는 필요할 수 있습니다 이 변수를 false로 설정하려면.git-update-index (1)를 참조하십시오. 기본값은 true입니다 (Core.FileMode가 지정되지 않은 경우 구성 파일에서).

-c 플래그를 사용하여 일회성 명령에 대해이 옵션을 설정할 수 있습니다.

git -c core.fileMode=false diff

-c core.fileMode = false를 입력하면 귀찮게 될 수 있으므로 모든 Git Repos에 대해이 플래그를 설정하거나 하나의 Git Repo를 위해 다음을 설정할 수 있습니다.

# this will set your the flag for your user for all git repos (modifies `$HOME/.gitconfig`)
git config --global core.fileMode false

# this will set the flag for one git repo (modifies `$current_git_repo/.git/config`)
git config core.fileMode false

또한 Git Clone 및 Git Init는 Git Global Core.FileMode False에서 겹쳐 쓰이는 것처럼 Repo Config에서 Core.FileMode를 명시 적으로 설정합니다.

경고

Core.FileMode는 모범 사례가 아니며 신중하게 사용해야합니다.이 설정은 모드의 실행 비트 및 읽기 / 쓰기 비트를 절대로 포함합니다.많은 경우, chmod -r 777과 같은 것을 한 것으로 생각하면이 설정이 필요하다고 생각하면 모든 파일을 실행할 수 있습니다.그러나 대부분의 프로젝트에서 대부분의 파일은 보안상의 이유로 실행 가능하지 않아야합니다.

이러한 종류의 상황을 해결하는 적절한 방법은 다음과 같은 것으로 폴더 및 파일 권한을 별도로 처리하는 것입니다.

find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \;  # Make files read/write

그렇게하면 매우 희귀 한 환경을 제외하고는 Core.FileMode를 사용할 필요가 없습니다.



답변

작업 트리에서 실행 취소 모드 변경 :

git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'\n' chmod -x

또는 mingw-git에서

git diff --summary | grep  'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'\n' chmod +x
git diff --summary | grep  'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'\n' chmod -x

또는 BSD / MacOS에서

git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x


답변

모든 REPOS에 대해이 옵션을 설정하려면 --global 옵션을 사용하십시오.

git config --global core.filemode false

이것이 작동하지 않으면 아마도 최신 버전의 GIT를 사용하고 있으므로 --add 옵션을 시도하십시오.

git config --add --global core.filemode false

--global 옵션없이 실행하면 작업 디렉토리가 REPO가 아닌 경우 얻을 수 있습니다.

error: could not lock config file .git/config: No such file or directory


답변

만약에

git config --global core.filemode false

당신을 위해 작동하지 않고 수동으로 수행하십시오.

cd into yourLovelyProject folder

.git 폴더로 CD :

cd .git

구성 파일 편집 :

nano config

true를 거짓으로 변경하십시오

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

저장, 종료, 상위 폴더로 이동 :

cd ..

턱시도를 재설하십시오

git init

너는 끝났어!



답변

Greg Hewgill 응답 (core.fileMode Config 변수 사용)에 추가 :

git update-index의 -chmod = (- | +) x 옵션을 사용할 수 있습니다 (낮은 수준의 "git add")을 사용하여 인덱스에서 실행 권한을 변경하려면 "git을 사용하면 선택할 수 있습니다.커밋 "("git commit -a "하지 마십시오).



답변

전역 적으로 구성 할 수 있습니다.

git config - global core.fleMode false

위의 내용이 작동하지 않으면 그 이유는 로컬 구성이 전역 구성을 무시할 수 있습니다.

글로벌 구성을 적용하려면 로컬 구성을 제거하십시오.

git config -unset core.fileMode.

또는 로컬 구성을 올바른 값으로 변경할 수 있습니다.

git config core.fileMode false입니다

출처:https://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-file-mode-chmod-changes
반응형