chmod
를 사용하여 파일 모드를 777로 변경해야 하는 프로젝트가 있지만 기본 저장소에서는 변경되어서는 안 됩니다.
Git은 chmod -R 777 .
모든 파일을 변경된 것으로 표시합니다. Git이 파일에 적용된 모드 변경 사항을 무시하도록 하는 방법이 있습니까?
질문자 :Marcus Westin
chmod
를 사용하여 파일 모드를 777로 변경해야 하는 프로젝트가 있지만 기본 저장소에서는 변경되어서는 안 됩니다.
Git은 chmod -R 777 .
모든 파일을 변경된 것으로 표시합니다. Git이 파일에 적용된 모드 변경 사항을 무시하도록 하는 방법이 있습니까?
노력하다:
git config core.fileMode false
core.fileMode Tells Git if the executable bit of files in the working tree is to be honored. Some filesystems lose the executable bit when a file that is marked as executable is checked out, or checks out a non-executable file with executable bit on. git-clone(1) or git-init(1) probe the filesystem to see if it handles the executable bit correctly and this variable is automatically set as necessary. A repository, however, may be on a filesystem that handles the filemode correctly, and this variable is set to true when created, but later may be made accessible from another environment that loses the filemode (eg exporting ext4 via CIFS mount, visiting a Cygwin created repository with Git for Windows or Eclipse). In such a case it may be necessary to set this variable to false. See git-update-index(1). The default is true (when core.filemode is not specified in the config file).
-c
플래그를 사용하여 일회성 명령에 대해 이 옵션을 설정할 수 있습니다.
git -c core.fileMode=false diff
그리고 --global
플래그는 로그인한 사용자의 기본 동작으로 만듭니다.
git config --global core.fileMode false
전역 설정의 변경 사항은 기존 리포지토리에 적용되지 않습니다. 또한 git clone
및 git init
는 Git 전역 core.fileMode false가 복제 시 로컬로 재정의된 대로 repo 구성에서 명시적으로 core.fileMode
를 true
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
모든 저장소에 대해 이 옵션을 설정하려면 --global
옵션을 사용하십시오.
git config --global core.filemode false
이것이 작동하지 않으면 최신 버전의 git을 사용 --add
수 있으므로 --add 옵션을 시도하십시오.
git config --add --global core.filemode false
--global 옵션 없이 실행하고 작업 디렉토리가 저장소가 아닌 경우
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
참을 거짓으로 변경
[core] repositoryformatversion = 0 filemode = true
->
[core] repositoryformatversion = 0 filemode = false
저장, 종료, 상위 폴더로 이동:
cd ..
자식을 다시 초기화
git init
당신은 끝났습니다!
Greg Hewgill 답변에 추가( core.fileMode
구성 변수 사용):
git update-index 의 --chmod=(-|+)x
옵션("git add"의 하위 버전)을 사용하여 "git add"를 사용하면 선택되는 인덱스의 실행 권한을 변경할 수 있습니다. 커밋"("git commit -a" 아님).
전역적으로 구성할 수 있습니다.
git config --global core.filemode false
위의 방법이 효과가 없다면 로컬 구성이 전역 구성을 재정의하기 때문일 수 있습니다.
전역 구성을 적용하려면 로컬 구성을 제거합니다.
git config --unset core.filemode
또는 로컬 구성을 올바른 값으로 변경할 수 있습니다.
git config core.filemode false
chmod 명령을 이미 사용한 경우 파일의 차이점을 확인하면 다음과 같이 이전 파일 모드와 현재 파일 모드가 표시됩니다.
새로운 모드 : 755
이전 모드 : 644
아래 명령을 사용하여 모든 파일의 이전 모드 설정
sudo chmod 644 .
이제 명령을 사용하거나 수동으로 구성 파일에서 core.fileMode를 false로 설정합니다.
git config core.fileMode false
그런 다음 chmod 명령을 적용하여 다음과 같은 모든 파일의 권한을 변경합니다.
sudo chmod 755 .
그리고 다시 core.fileMode를 true로 설정합니다.
git config core.fileMode true
모범 사례를 위해 core.fileMode를 항상 false로 유지하지 마십시오.
~/.gitconfig에서 다음 별칭을 정의하면 git 명령에 따라 fileMode를 일시적으로 쉽게 비활성화할 수 있습니다.
[alias] nfm = "!f(){ git -c core.fileMode=false $@; };f"
이 별칭이 git 명령에 접두사로 붙으면 파일 모드 변경 사항이 그렇지 않으면 표시될 명령과 함께 표시되지 않습니다. 예를 들어:
git nfm status
구성 파일에서 재귀적으로 파일 모드를 false로 설정하려면(하위 모듈 포함): find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
간단한 솔루션:
프로젝트 폴더에서 이 간단한 명령 을 누르십시오(원래 변경 사항은 제거되지 않음) ... 프로젝트 폴더 권한 을 변경하는 동안 수행된 변경 사항만 제거합니다
명령은 아래와 같습니다.
자식 구성 core.fileMode 거짓
이 모든 불필요한 파일이 수정되는 이유: commend sudo chmod -R 777 ./yourProjectFolder를 사용하여 프로젝트 폴더 권한을 변경했기 때문입니다.
당신은 당신이하지 않은 변경 사항을 언제 확인합니까? git diff 파일 이름 을 사용하는 동안 아래와 같이 찾았습니다.
old mode 100644 new mode 100755
이것은 나를 위해 작동합니다.
find . -type f -exec chmod ax {} \;
운영 체제에 따라 또는 그 반대로
find . -type f -exec chmod a+x {} \;
출처 : http:www.stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-file-mode-chmod-changes
하나의 특정 커밋에 대한 커밋 작성자를 변경하는 방법은 무엇입니까? (0) | 2021.11.19 |
---|---|
"git export"(예: "svn export")를 수행합니까? (0) | 2021.11.19 |
Git에서 여러 커밋의 작성자 및 커미터 이름과 이메일을 변경하는 방법은 무엇입니까? (0) | 2021.11.19 |
Git 저장소를 특정 폴더에 어떻게 복제합니까? (0) | 2021.11.19 |
높이를 전환하는 방법: 0; 높이: 자동; CSS를 사용하여? (0) | 2021.11.19 |