Git의 단계별 변경에서 "이전 모드 100755 new mode 100644"라고 적힌 파일을 제거하려면 어떻게 해야 합니까?
때 에 눈에 이 많이 해서 내 어떤이유서에프음처꺼때냈위을저에장소눈표복에본내작계사있파없서많업해속만지이었이일사는변이시습니항띄었되경는에작에복업본사해로서에를지인젝트▁for▁in▁that▁my▁showing▁of▁up▁when▁copy▁in▁i▁from▁a▁made▁the▁but▁keep있▁did▁for계복작표,itory많내▁files▁repos▁my▁got▁mine▁pull▁i▁a▁ton어▁working서파▁a해unstaged changes 지역.
Windows xp에서 Git Gui를 사용하고 있으며 파일을 보면 무엇이 변경되었는지 확인할 수 있습니다.내 눈에 보이는 것은:
old mode 100755
new mode 100644
이게 무슨 뜻인지 아는 사람?
단계별 변경 목록에서 이러한 파일을 삭제하려면 어떻게 해야 합니까?(최근에 편집하고 커밋하려는 파일을 골라내기 위해 수백 개의 파일을 거쳐야 하는 것은 매우 귀찮습니다.)
가 보기에 파일 .755=rwxr-xr-x,644=rw-r--r--) - 이전 모드에는 +x(실행 가능) 플래그가 포함되어 있지만, 새 모드에는 포함되어 있지 않습니다.
이 msysgit 이슈의 답변은 핵심 설정을 제안합니다.문제를 제거하기 위해 false로 파일 모드 변경:
git config core.filemode false
정core.filemodeFalse는 작동하지만 의 설정을 확인합니다.~/.gitconfig 사의무않있습다니고지시에 있는 사람들에 있습니다.git/config.
일반적으로 윈도우즈 시스템과 리눅스/유닉스 시스템 간에 repo가 복제될 때 이 문제가 발생합니다.
그냥 git에게 파일 모드 변경을 무시하라고 하세요.다음은 몇 가지 방법입니다.
현재 repo에 대해서만 구성:
git config core.filemode false전체적으로 구성:
git config --global core.filemode false~/.gitconfig에 추가:
[core] filemode = false
그 중 하나만 선택하면 됩니다.
이전 하드 드라이브에서 작업 파일로 Git repo를 복사할 때 이 문제가 몇 번 발생했습니다.문제는 소유자와 권한이 이전 드라이브/기계에서 새 드라이브로 변경되었기 때문입니다.요점은 다음 명령을 실행하여 문제를 해결한다는 것입니다(이 슈퍼유저 답변 덕분에).
sudo chmod -R -x . # remove the executable bit from all files
이전 명령은 실제로 gitdiff가 보고한 차이를 해결하지만 디렉터리를 나열하는 기능을 취소합니다.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 ls-files -m | xargs -L 1 chmod 644
저도 같은 문제에 직면한 적이 있습니다.그리고 이것이 내 목숨을 구합니다.
이렇게 하면 모든 권한이 차이가 있는 상태로 되돌아가므로 파일에 대해 변경한 내용만 남게 됩니다.
https://gist.github.com/jtdp/5443498
git diff -p -R --no-color \
| grep -E "^(diff|(old|new) mode)" --color=never \
| git apply
자세한 내용은 https://stackoverflow.com/a/4408378/450383 에서 확인하십시오.
승된답변인을 하는 데 가능한 입니다.git config core.filemode false효과는 있지만 결과는 있습니다. 정core.filemode는 파일 한 비트 에 지시하여.to false로 .이 수동으로하거나 "" " " " " " " " " " " 를 설정해야 .core.filemode사실대로
만약 모든 수정된 파일이 100755 모드를 가져야 한다면 덜 결과적인 대안은 다음과 같은 것을 하는 것입니다.
chmod 100755 $(git ls-files --modified)
이는 추가적인 영향 없이 모드를 정확하게 변화시킵니다.
가 파일 과 동기화되었기 .)core.filemode모드 변경이 나중에 다시 발생할 수도 있다는 가능성을 열어두고 있습니다. 저의 경우 다시 발생하는지 알고 싶습니다.core.filemode내게 숨기지 않을 거야, 난 원하지 않아요.)
이 솔루션은 Git 파일 사용 권한을 100755에서 100644로 변경하고 변경 사항을 비트 버킷 원격 repo로 다시 푸시합니다.
레포의 파일 권한을 살펴봅니다. gits-files --stage
만약 100755이고 당신이 100644를 원한다면요.
그런 다음 gitls-files --stage | sed 's/\t//g' | cut -d' ' -f4 | xargs git update-index --chmod=-x 명령을 실행합니다.
이제 repo의 파일 권한을 다시 확인합니다. gits-files --stage
이제 변경 내용을 커밋합니다.
git 상태
git commit -m "적절한 파일 사용 권한 확보"
기트 푸쉬
디렉터리의 일부 권한을 변경한 것 같습니다.복원하기 위해 다음 단계를 수행했습니다.
$ git diff > backup-diff.txt ### in case you have some other code changes
$ git checkout .
원격 저장소에서 모든 파일을 실행할 수 있을 때 이 문제가 발생합니다.이러한 파일을 다시 실행할 수 있게 하면 모든 것이 다시 정상으로 설정됩니다.
chmod +x <yourfile> //For one file
chmod +x folder/* // For files in a folder
다음을 수행해야 할 수도 있습니다.
chmod -x <file> // Removes execute bit
대신 위의 작업으로 인해 변경된 실행 파일로 설정되지 않은 파일의 경우.이것을 하는 더 나은 방법이 있지만 이것은 매우 빠르고 더러운 해결책일 뿐입니다.
git reset --hard HEAD를 사용하여 repo를 예상 기본 상태로 재설정할 수 있습니다.
다음 명령을 사용하여 파일 모드를 다시 변경할 수 있습니다. git add --chmod=+x -- filename그런 다음 지점에 커밋합니다.
이는 bkm가 발견한 내용과 동일하지만 삭제된 파일도 고려하고 변경 사항을 적용하는 동안 경고만 제공합니다.
이것은 이전 커밋에서 파일 모드 설정을 되돌리는 데 잘 작동합니다.
git diff -p --no-ext-diff --no-color --diff-filter=d | grep -E "^(diff|old mode|new mode)" | sed -e "s/^old/NEW/;s/^new/old/;s/^NEW/new/" | git apply
삭제된 파일이 있으면 위의 여러 솔루션이 손상됩니다.
이렇게 하면 수정된 파일만 나열되고 삭제되지 않은 파일은 모두 다음으로 변경됩니다.755
git diff-files --name-only --diff-filter=d | xargs -L 1 chmod 755
권한이 변경된 문제가 있는 파일을 하나 가지고 있었습니다.개별적으로 롤백하기 위해 수동으로 삭제했습니다.rm <file>그리고 나서 새로운 사본을 꺼내기 위해 체크아웃을 했습니다.
다행히 아직 무대에 올리지는 않았습니다.
내가 도망칠 수 있었더라면git reset -- <file>달리기 전에git checkout -- <file>
저는 방금 마스터와 브랜치를 나누다가 이 문제에 부딪혔습니다.분기가 마스터와 동일할 것으로 예상했을 때 Git에서 하나의 '모드' 오류를 반환했습니다.파일을 삭제하고 마스터를 다시 병합하여 수정했습니다.
처음에 디프를 실행했습니다.
git checkout my-branch
git diff master
반환된 항목:
diff --git a/bin/script.sh b/bin/script.sh
old mode 100755
new mode 100644
그런 다음 다음을 실행하여 수정했습니다.
rm bin/script.sh
git merge -X theirs master
이 일이 있은 후에.git diffmy-message와 master 사이에 차이가 없습니다.
언급URL : https://stackoverflow.com/questions/1257592/how-do-i-remove-files-saying-old-mode-100755-new-mode-100644-from-unstaged-cha
'codememo' 카테고리의 다른 글
| Zure 연결 문자열 모범 사례 (0) | 2023.06.02 |
|---|---|
| 아이폰에서 "홈 화면에 추가"를 위한 자바스크립트? (0) | 2023.06.02 |
| 이중 *(스플랫) 연산자는 무엇을 합니까? (0) | 2023.06.02 |
| 날짜 시간과 시간의 차이(Ruby) (0) | 2023.06.02 |
| dyld'__deld_with_deld_with_deld:오류 메시지 없음 (0) | 2023.05.28 |