prosource

'git status'는 변경된 파일을 표시하지만 'git diff'는 표시하지 않습니다.

probook 2023. 5. 23. 22:00
반응형

'git status'는 변경된 파일을 표시하지만 'git diff'는 표시하지 않습니다.

비슷한 질문들을 모두 살펴봤습니다.그런데 제가 다시 확인해보니 확실히 이상한 일이 일어나고 있습니다.

한 서버(Solaris with Git 1.8.1)에서 Git 저장소를 복제한 다음 .git 폴더를 기존 라이브 파일로 복사했습니다.완벽하게 작동했어요, 도망갈 수 있었어요

git status

그리고나서

git diff [filename]

서로 다른 파일을 확인합니다.

다른 서버(Solaris with Git 1.7.6)에서도 동일한 작업을 수행하고 있습니다.

git diff [filename]

파일의 내용이 확실히 다른 경우에도 에서는 아무것도 표시되지 않습니다.새 파일을 추가하고 커밋한 다음 편집하는 것도 테스트했습니다. 이슈인 같은문니다입제,.git status변경된 되지만 파일은 변경된 것으로 표시됩니다.git diff아무것도 표시되지 않습니다.변경된 파일을 다운로드하여 diff를 로컬로 실행하면 diff 출력이 나옵니다.

저에게는 파일 권한과 관련이 있었습니다.내 프로젝트에서 Mac/Linux를 사용하는 누군가가 내 Windows Git 클라이언트가 복제하지 못한 기본 권한이 아닌 일부 파일을 커밋한 것 같습니다.

해결책은 Git에게 파일 권한을 무시하라고 말하는 것이었습니다.

git config core.fileMode false

기타 통찰력:Git이 파일 모드(chmod) 변경을 무시하도록 하려면 어떻게 해야 합니까?

파일을 인덱스에 추가했습니다.

git add file_name

그리고는 달려갔습니다.

git diff --cached file_name

을 볼수다니있의 을 볼 수 .git diff 여기에

Git Add를 실행 취소해야 하는 경우 다음을 참조하십시오.커밋하기 전에 'git add'를 실행 취소하려면 어떻게 해야 합니까?

몇 가지 이유가 있습니다.git status도 있지만, 차를보수있지만도일이,만,git diff아닐 수도 있습니다.

  • 파일의 모드(권한 비트)가 777에서 700으로 변경되었습니다.

  • 라인 피드 스타일이 CRLF(DOS)에서 LF(UNIX)로 변경되었습니다.

무슨 일이 일어났는지 알아내는 가장 쉬운 방법은 실행하는 것입니다.git format-patch HEAD^생성된 패치의 내용을 확인합니다.

저는 어떤 프로그램에 의해 수백 개의 줄 끝이 수정되는 문제가 있었습니다.git diff모든 원본 파일이 변경된 것으로 나열됩니다.끝을 에, 라인끝고후한정을단,후,git status여전히 파일을 수정된 것으로 나열합니다.

인덱스에 모든 파일을 추가한 다음 인덱스를 재설정하여 이 문제를 해결할 수 있었습니다.

git add -A
git reset

core.filemodefalse로 설정되었습니다.

이전 답변에서 이미 언급했듯이, 이 상황은 라인 종료 문제(CR/LF 대 LF)로 인해 발생할 수 있습니다.Git 버전 2.22.0에서 다음 명령을 사용하여 이 문제를 해결했습니다.

git add --renormalize .

설명서에 따라:

       --renormalize
           Apply the "clean" process freshly to all tracked files to
           forcibly add them again to the index. This is useful after
           changing core.autocrlf configuration or the text attribute in
           order to correct files added with wrong CRLF/LF line endings.
           This option implies -u.

Git 설치나 저장소에 문제가 있는 것 같습니다.

실행 시도:

GIT_TRACE=2 git <command>

도움이 될 만한 것이 있는지 확인해 보세요.그래도 도움이 되지 않는다면 트레이스를 사용하여 무엇이 잘못되고 있는지 확인하십시오.

strace git <command>

저도 비슷한 문제가 있었습니다.git diff, 차를보겠지만주여이,만.git diff <filename>하지 않을 것입니다.알고 보니 내가 설정한 것은LESS를 포함하는 -F(--quit-if-one-screen 해당 플래그를 제거하면 문제가 해결되었습니다.

단답형

중입니다.git add가끔은 도움이 됩니다.

Git 상태는 변경된 파일을 표시하고 Gitdiff는 아무것도 표시하지 않습니다...

> git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   package.json

no changes added to commit (use "git add" and/or "git commit -a")
> git diff
> 

...git add를 실행하면 불일치가 해결됩니다.

> git add
> git status
On branch master
nothing to commit, working directory clean
> 

TL;DR

줄 끝 문제:

  1. autocolf 정 true 경로 니합다 변즉 본다니 즉, 을 체크아웃하고 Git저장소에서 .
    git config --global core.autocrlf true
    
  2. 스타일로 합니다.
    unix2dos **
    
  3. 가 됩니다.
    git add .
    git status
    

배경

  • 플랫폼: Windows, WSL

이런 됩니다.git status에서 표시됩니다.git diff아무것도 표시되지 않습니다.이것은 아마도 줄 끝 부분의 문제일 것입니다.

근본 원인

이 문제가 자주 발생하는 이유는 Windows 시스템에서 작업하고 WSL에서 Git와 상호 작용하기 때문입니다.Linux와 Windows 설정 간에 전환하면 이 End-of-Line 문제가 쉽게 발생할 수 있습니다.OS에서 사용되는 줄 끝 형식이 다르기 때문에:

  • Windows:\r\n
  • OS X / Linux:\n

일반적인

컴퓨터에 Git를 설치하면 줄 끝 설정을 선택하라는 메시지가 표시됩니다.일반적으로 원격 Git 저장소에서 Linux 스타일의 줄 끝을 사용(커밋)하고 Windows 시스템에서 Windows 스타일을 체크아웃합니다.기본 설정을 사용하는 경우 Git이 수행하는 작업입니다.

여기에 이미지 설명 입력

당신이 셸 스크립트를 그것을 합니다.myScript.sh 스크립트 "Bash 크트립"myScript.cmd이 스크립트는 둘 다 원격 Git 저장소에 Linux 스타일 종료로 존재하며 Windows 시스템에 Windows 스타일 종료로 존재합니다.

는 셸 하고 셸스립트체하사고용다니습했웃크아파일을 사용하곤 했습니다.dos2unix합니다. WSL에서 사용할 수 있습니다.이것이 제가 그 문제에 직면하는 이유입니다.Git는 계속해서 제가 수정한 라인 끝이 변경되었다고 말하고 변경 사항을 커밋할지 여부를 묻습니다.

해결책

줄의 줄 예: " " " 기 " 본 " 끝 " 변 " 예 " 경 " 하 " 는 " 을 " 우 " 경 " 의 " 일 " 줄 " 줄 " 파 " 끝 " 설 " 을 " 부 " 정 " 고 " 하 " 일 " 사 " 용 " : " ▁use " " 예 " 기 "dos2unix또는dos2unix합니다.), 삭제합니다.줄 끝 변경사항이 이미 존재하며 이 변경사항을 제거하려면git add그들과 변화는 사라질 것입니다.

저는 이 문제에 부딪혔습니다.제 경우는 rcwxok에서 올린 이슈와 비슷했습니다.

제 경우에는, 제가 설정했습니다.PAGER ~ 경변:PAGER='less -RSF'.

하지만, 이전 답변과 달리, 저는 그것을 제거하고 싶지 않았습니다.-F옵션, 왜냐하면 나는 그것을 분명히 그곳에 두었기 때문에 차이를 보여주는 것을 막기 위해.less스크린이 꽉 찬 것보다 짧다면요.

제거하는 대신 원하는 결과를 얻는 방법-F추가했습니다.-X:PAGER='less -RSFX'이것은 둘 다 해결했습니다.git diff문제가 발생하고 추가적으로 그것은 짧은 어려움을 보여주는 것을 막습니다.less.

저는 방금 비슷한 문제를 다루었습니다. git diff fileGit 인덱스에 파일 이름의 일부를 대문자로 추가했기 때문에 아무것도 표시되지 않았습니다.GeoJSONContainer.js.

이후 이름을 다음으로 변경했습니다.GeoJsonContainer.js변경 사항이 추적되지 않습니다. git diff GeoJsonContainer.js아무것도 보이지 않았습니다.강제 플래그가 있는 인덱스에서 파일을 제거하고 파일을 다시 추가해야 했습니다.

git rm -f GeoJSONContainer.js
git add GeoJSONContainer.js

당신의 사용 사례에 대한 나의 가정:

파일 및 디렉터리가 포함된 기존 디렉터리가 있고 현재 디렉터리의 데이터를 변경하지 않고 다른 위치에서 복제된 Git 저장소로 변환하려고 합니다.

두 가지 방법이 있습니다.

repo - 제복 - mv.git reset reset --hard

빈 한 다음 "" "" "" "" "" "" "" "" "" ""를 이동하는입니다..git디렉터리를 대상 디렉터리로 이동합니다.없이 으로 문제없작려면일실합니다야행해로으적반을 실행해야 .

git reset --hard

그러나 이렇게 하면 현재 디렉터리의 파일 상태가 변경됩니다.디렉토리의 전체 복사본/rsync에서 이를 시도하고 변경 사항을 검토할 수 있습니다.적어도 그 후에는 더 이상 사이의 불일치를 볼 수 없습니다.git log그리고.status.

새 리포지토리 시작 - 원점을 가리킵니다.

는 덜: 두번째덜불니다합안는다니.cd로, 하세요.

git init

그런 다음 새 저장소에 조상이 있다고 말합니다.

git remote add origin original_git_repo_path

그럼 안전하게

git fetch origin master

로컬 파일을 변경하지 않고 데이터를 복사할 수 있습니다.이제 모든 것이 괜찮을 것입니다.

저는 항상 오류가 발생하기 쉬운 두 번째 방법을 추천합니다.

다음과 같은 방식으로 동일한 문제가 설명되었습니다.

$ git diff

Git는 오류 없이 프롬프트로 돌아갔습니다.

입력한 경우

$ git diff <filename>

Git는 오류 없이 프롬프트로 돌아갔습니다.

마침내, 주위를 읽음으로써 나는 알아차렸습니다.git diff는 제로전화합니다를실▁the다합라고 부릅니다.mingw64\bin\diff.exe그 일을 하기 위해.

제안을 하나 하지.Windows를 실행하고 있는데 다른 Bash 유틸리티를 설치했는데 경로가 변경되어 더 이상 mingw64\bin 디렉터리를 가리키지 않게 되었습니다.

따라서 다음을 입력합니다.

git diff

그러면 이 문제가 있을 수 있다는 메시지가 나타납니다.

파일 이름으로 실행되는 이름.git mingw64\bin에 .

마지막으로, 이 문제를 해결하기 위해, 저는 실제로 제 사진을 복사했습니다.mingw64\binGit가 찾고 있던 위치의 디렉토리입니다.제가 해봤는데도 작동이 안 됐어요.

그런 다음 Git Bash 창을 닫고 다시 열어보니 오류가 발생한 동일한 저장소로 이동하여 이제 작동합니다.

git diff -a모든 파일을 텍스트로 처리합니다.

저는 이 문제를 또 우연히 발견했습니다.하지만 이번에는 다른 이유로 발생했습니다.이전 버전을 덮어쓰려고 저장소에 파일을 복사했습니다.이제 파일이 수정된 것을 알 수 있지만 diff가 diff를 반환하지 않습니다.

예를 들어, 저는 메인 페이지를 가지고 있습니다.xaml 파일.파일 탐색기에서 새 메인 페이지를 붙여넣었습니다.현재 저장소에 있는 파일 위에 xaml 파일이 있습니다.저는 다른 기계에서 작업을 했고 여기에 파일을 붙였습니다.

Git가 수정됨을 표시합니다.

파일에 수정된 내용이 표시되지만 실행하면git diff변경 내용이 표시되지 않습니다.

파일의 파일 정보가 변경되고 Git이 실제로 동일한 파일이 아니라는 것을 알기 때문일 것입니다.재밌는.

Git diff는 아무것도 보여주지 않습니다.

파일에서 diff를 실행하면 아무것도 표시되지 않고 프롬프트만 반환됩니다.

많은 를 참조합니다.core.autocrlf설정분명히 그럴 수 있지만, 저는 또 다른 유사한 문제인 git 필터를 언급하고 싶습니다.

한다면core.autocrlf=true그런 다음 작업 트리와 인덱스 사이를 이동할 때 텍스트를 자동으로 처리하는 Git Smooth 또는 Clean 필터와 같은 동작을 수행합니다.

마찬가지로, 파일이 마지막으로 커밋된 이후에 Git 필터 설정을 변경한 경우에는 다음과 같은 차이가 발생할 수 있습니다.git status은 은에나지않습다니나타것그▁에 나타나지 않습니다git diff그 이해하기 어려운 차이는 여전히 남아있을 수 있습니다.git add X; git diff --cached -- X구성된 필터의 특성에 따라 달라집니다.

이 문제는 주피터 노트북 파일을 인덱스에 추가하기 전과 디파짓하기 전에 메타데이터를 필터링하는 git 필터를 구현하는 python 패키지인 nbstripout을 사용할 때 발생했습니다.필터 구성 설정을 이전 상태로 되돌리고 실행하여 해결했습니다.git restore영향을 받는 파일에서 변경 사항을 다시 적용할 수 있습니다(새 설정을 장기적으로 유지하기 위해)., 은 저의경우, 설이저습다니었에 되었습니다..git/config의 지배하에filter.nbstripout그리고.diff.ipynb섹션.

저는 용한사를 요.git svn파일 하나에 대해 이 문제가 있었습니다.용사를 합니다.ls-tree파일의 각 조상에 대해, 저는 하나가 2개의 하위 폴더를 가지고 있다는 것을 알아차렸습니다.Submit그리고.submit제가 Windows에 있었기 때문에 둘 다 체크아웃할 수 없어서 이 문제가 발생했습니다.

해결책은 그 중 하나를 에서 직접 삭제하는 것이었습니다.TortoiseSVN Repo-browser그리고 나서 달려가기 위해git svn fetch에 뒤에git reset --hard origin/trunk.

언급URL : https://stackoverflow.com/questions/14564946/git-status-shows-changed-files-but-git-diff-doesnt

반응형