Development Tip

Git의 단계 화되지 않은 변경 사항에서 "old mode 100755 new mode 100644"라는 파일을 제거하려면 어떻게해야합니까?

yourdevel 2020. 9. 30. 11:36
반응형

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에게 파일 모드 변경을 무시하라고 말하면 다음과 같은 몇 가지 방법이 있습니다.

  1. 현재 저장소에 대해서만 구성 :

    git config core.filemode false
    
  2. 전역 구성 :

    git config --global core.filemode false
    
  3. ~ / .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.

참고URL : https://stackoverflow.com/questions/1257592/how-do-i-remove-files-saying-old-mode-100755-new-mode-100644-from-unstaged-cha

반응형