Git의 단계 화되지 않은 변경 사항에서 "old mode 100755 new mode 100644"라는 파일을 제거하려면 어떻게해야합니까?
어떤 이유로 처음에 git 프로젝트를 위해 저장소에서 가져 왔을 때 작업 복사본에 눈에 띄는 변경 사항이 없지만 내 unstaged changes
영역 에 계속 표시되는 수많은 파일이 있습니다.
저는 Windows xp에서 Git Gui를 사용하고 있으며 변경된 사항을 확인하기 위해 파일을 볼 때입니다. 내가 보는 건 :
old mode 100755
new mode 100644
이것이 무엇을 의미하는지 아는 사람이 있습니까?
단계 화되지 않은 변경 사항 목록에서 이러한 파일을 어떻게 가져올 수 있습니까? (최근에 편집하고 커밋하고 싶은 파일을 선택하기 위해 100 개의 파일을 검토해야하는 매우 성가신 일입니다.)
그것은 나에게 유닉스 파일 권한 모드처럼 보입니다 ( 755
= rwxr-xr-x
, 644
= rw-r--r--
)-이전 모드에는 + x (실행 가능) 플래그가 포함되어 있지만 새 모드에는 없습니다.
이 msysgit 문제의 답변 은 문제를 제거하기 위해 core.filemode를 false로 설정하도록 제안합니다.
git config core.filemode false
설정 core.filemode
을 false로하는 작업을 수행하지만,에서 확인 설정하기 ~/.gitconfig
에서 사람들에 의해 무시되고되지 않습니다 .git/config
.
이전 하드 드라이브에서 작업 파일이있는 git repo를 몇 번 복사 할 때이 문제가 발생했습니다. 문제는 소유자와 권한이 이전 드라이브 / 시스템에서 새 드라이브 / 시스템으로 변경 되었기 때문에 발생합니다. 장단점은 다음 명령을 실행하여 문제를 해결하는 것입니다 ( 이 수퍼 유저 답변 덕분에 ).
sudo chmod -R -x . # remove the executable bit from all files
이전 명령 때문에, 실제로 자식은 diff를보고 그 차이를 해결할 수 있지만, 디렉토리를 나열 할 수있는 능력을 취소합니다 ls ./
실패합니다 ls: .: Permission denied
. 이를 수정하려면 :
sudo chmod -R +X . # add the executable bit only for directories
나쁜 소식은 .sh
스크립트 와 같이 실행 가능한 상태로 유지하려는 파일이있는 경우 해당 파일 을 되돌려 야한다는 것입니다. 각 파일에 대해 다음 명령을 사용하여이를 수행 할 수 있습니다.
chmod +x ./build.sh # where build.sh is the file you want to make executable again
디렉토리의 일부 권한을 변경 한 것 같습니다. 복원하기 위해 다음 단계를 수행했습니다.
$ git diff > backup-diff.txt ### in case you have some other code changes
$ git checkout .
git reset --hard HEAD를 시도하여 저장소를 예상 된 기본 상태로 재설정 할 수 있습니다.
일반적으로 저장소가 Windows와 Linux / Unix 시스템간에 복제 될 때 발생합니다.
git에게 파일 모드 변경을 무시하라고 말하면 다음과 같은 몇 가지 방법이 있습니다.
현재 저장소에 대해서만 구성 :
git config core.filemode false
전역 구성 :
git config --global core.filemode false
~ / .gitconfig에 추가하십시오.
[core] filemode = false
그중 하나를 선택하십시오.
이는 가져 와서 모든 파일이 원격 저장소에서 실행 가능할 때 발생합니다. 다시 실행 가능하게하면 모든 것이 다시 정상으로 돌아갑니다.
chmod +x <yourfile> //For one file
chmod +x folder/* // For files in a folder
다음을 수행해야 할 수 있습니다.
chmod -x <file> // Removes execute bit
대신 실행 파일로 설정되지 않았고 위의 작업으로 인해 변경된 파일의 경우. 이 작업을 수행하는 더 좋은 방법이 있지만 이것은 매우 빠르고 더러운 수정입니다.
나는 같은 문제에 직면했습니다. 그리고 이것은 내 생명을 구합니다 : https://gist.github.com/jtdp/5443498
git diff -p -R --no-color \ | grep -E "^(diff|(old|new) mode)" --color=never \ | git apply
권한이 변경된 문제가있는 파일이 하나뿐이었습니다. 개별적으로 롤백하기 위해를 사용하여 수동으로 삭제 rm <file>
한 다음 체크 아웃하여 새 복사본을 가져 왔습니다 .
운 좋게도 나는 그것을 아직 상연하지 않았다.
내가 뛰기 git reset -- <file>
전에 달릴 수 있었다면git checkout -- <file>
마스터와 분기를 비교할 때이 문제가 발생했습니다. 내 브랜치가 마스터와 동일 할 것으로 예상했을 때 Git이 하나의 '모드'오류를 반환했습니다. 파일을 삭제 한 다음 마스터를 다시 병합하여 수정했습니다.
먼저 diff를 실행했습니다.
git checkout my-branch
git diff master
이것은 반환 :
diff --git a/bin/script.sh b/bin/script.sh
old mode 100755
new mode 100644
I then ran the following to fix:
rm bin/script.sh
git merge -X theirs master
After this, git diff
returned no differences between my-branch and master.
You can use the following command to change your file mode back. git add --chmod=+x -- filename
Then commit to the branch.
'Development Tip' 카테고리의 다른 글
Android에서 사용할 수있는 인터넷 연결이 있는지 감지 (0) | 2020.09.30 |
---|---|
Vim에서 어떻게 다시 실행 (즉, "실행 취소")합니까? (0) | 2020.09.30 |
.gitconfig에서 여러 사용자를 지정할 수 있습니까? (0) | 2020.09.30 |
차이점 (0) | 2020.09.30 |
숫자 배열의 합을 찾는 방법 (0) | 2020.09.30 |