chmod
개발 중에 파일 모드 를 777로 변경해야하지만 기본 리포지토리에서 변경해서는 안되는 프로젝트가 있습니다 .
Git chmod -R 777 .
은 모든 파일을 가져 와서 변경된 것으로 표시합니다. 파일에 대한 Git 무시 모드 변경을 만드는 방법이 있습니까?
chmod
개발 중에 파일 모드 를 777로 변경해야하지만 기본 리포지토리에서 변경해서는 안되는 프로젝트가 있습니다 .
Git chmod -R 777 .
은 모든 파일을 가져 와서 변경된 것으로 표시합니다. 파일에 대한 Git 무시 모드 변경을 만드는 방법이 있습니까?
답변:
시험:
git config core.fileMode false
에서 자식-설정 (1) :
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 (e.g. 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
명시 적으로 설정 core.fileMode
에 true
논의로 환매 특약 설정에서 클론에 오버라이드 (override) 로컬 힘내 글로벌 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 config --global core.filemode false
하면 모든 repos에 대해이 작업을 한 번만 수행하면됩니다.
git config
명령은 설정을 올바른 구성 파일에 작성합니다 ( .git/config
현재 리포지토리의 ~/.gitconfig
경우 또는와 함께 사용하는 경우 --global
).
작업 트리에서 모드 변경 취소 :
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
-d'\n'
부분은 생략하십시오 xargs
.
tr '\n' '\0'
한 다음 -0
arg를 xargs로 사용하여 NUL을 구분 기호로 사용할 수 있습니다.
tr
일했다! OSX의 전체 명령은 다음과 같습니다.git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-|tr '\n' '\0'|xargs -0 chmod -x
모든 리포지토리에이 옵션을 설정하려면 해당 --global
옵션을 사용하십시오 .
git config --global core.filemode false
이것이 작동하지 않으면 아마도 최신 버전의 git을 사용하고 있으므로 --add
옵션을 사용해보십시오 .
git config --add --global core.filemode false
--global 옵션없이 실행하고 작업 디렉토리가 저장소가 아닌 경우
error: could not lock config file .git/config: No such file or directory
--add
같이,git config --add --global core.filemode false
만약
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
끝났습니다!
.git/config
있는 간단한 git config core.fileMode false
것으로 충분합니다. 구성 파일을 편집하는 경우 전역 지시문이 선택되도록 지시문을 완전히 제거하는 것이 좋습니다.
global
옵션을 제거 하면 .git / config를 수동으로 편집하는 것과 정확히 동일한 기능을 수행합니다.
~/.gitconfig
하고 ~/project/.git/config
)
git init
파일 모드를 다시 true로 설정해야합니까?
Greg Hewgill 답변에 추가 ( core.fileMode
구성 변수 사용) :
당신은 사용할 수 --chmod=(-|+)x
의 옵션 자식 갱신 인덱스 -a 커밋 자식 "당신이"커밋 힘내 "사용하는 경우가 뽑힐 것 곳에서, 인덱스에 실행 권한을 변경 ("자식 추가 "낮은 수준의 버전) (그리고 ").
전역 적으로 구성 할 수 있습니다.
git config --global core.filemode false
위의 방법으로 문제가 해결되지 않으면 로컬 구성이 전역 구성보다 우선하기 때문일 수 있습니다.
글로벌 구성을 적용하려면 로컬 구성을 제거하십시오.
git config --unset core.filemode
또는 로컬 구성을 올바른 값으로 변경할 수 있습니다.
git config core.filemode false
git config -l
(- 로컬 및 글로벌 모두 목록 현재 설정)
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로 유지하지 마십시오.
For best practises don't Keep core.fileMode false always
무슨 뜻인지 설명해야합니다.
For best practises don't Keep core.fileMode false always.
일부 파일 시스템 (예 : FAT)은 파일 권한을 지원하지 않으므로 OS는 기본값을보고합니다 (어쨌든 내 시스템에서는 766). 이 경우 core.filemode
불필요하고 의도하지 않은 권한 변경으로 커밋 기록을
core.filemode=false
하면 git은 실행 비트 변경을 무시하므로 로컬 권한을 변경할 필요가 없습니다. 색인에 권한 변경 사항을 이미 추가하지 않은 경우을 git add
끈 후 필요한 단계가 누락 됩니다 core.filemode
.
구성 파일에서 파일 모드를 반복적으로 설정하려면 (하위 모듈 포함) :
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
git submodule foreach git config core.fileMode false
간단한 해결책 :
이 히트 간단한 명령을 (프로젝트 폴더 는 원래 변경 사항을 제거하지 않습니다) 에만 것입니다 ... 변경 제거 했다 수행 하면 변경하면서 프로젝트 폴더 권한을
명령은 다음과 같습니다.
자식 설정 core.fileMode false
이 모든 불필요한 파일이 수정되는 이유 : 권장 sudo chmod -R 777 ./yourProjectFolder를 사용하여 프로젝트 폴더 권한을 변경했기 때문입니다 .
변경 사항을 언제 확인합니까? git diff filename 을 사용하는 동안 아래와 같이 발견했습니다.
old mode 100644
new mode 100755
이것은 나를 위해 작동합니다 :
find . -type f -exec chmod a-x {} \;
또는 운영 체제에 따라 반대로
find . -type f -exec chmod a+x {} \;