2017-11-01 10 views
0

이것은 지금 두 번 나에게 일어났습니다. 그래서 나는 그것을 가능하게하기 위해 할 수있는 일이 궁금했습니다.Git이 갑자기 repo의 모든 파일을 수정 된 파일로 나열합니다.

저희 팀에는 TFS git repo가 ​​있습니다. 나는 지점에 일하고있다, 말하자면 my-branch. 일부 R 스크립트를 수정하고 자주 커밋합니다. git status

Your branch is up-to-date with 'origin/my-branch'. 
Changes not staged for commit: 
    modified: path/to/script.R 

같은 그러나, 때때로, 나는 단지이 하나의 스크립트에서 일하고 있어요 때에도하는 git status 갑자기 난 단지했습니다 비록 수정으로의 repo에있는 모든 파일이 표시되는 곳을 보여줍니다 한 가지에 일하고 :

Your branch is up-to-date with 'origin/my-branch'. 
Changes not staged for commit: 

    modified: other/path/to/scripts.cpp 
    modified: path/to/script.R 
    modified: path/to/somethingElse.txt 
    modified: path/toward/otherStuff.csv 
    modified: path/toward/Wiki 
    modified: really/every/file 

을 나는이에 git diff을 실행하면 어떤 차이가있을 나타나지 않습니다. 그리고 나는 이전의 커밋으로 돌아갈 수는 있지만, 지금 막 나는 작업을 잃어 버릴 수 있다는 것을 압니다. 이 문제를 일으킬 수있는 일이 있습니까? 정말 이상 해요.

+0

캐리지 리턴 라인 피드 처리 일 수 있습니다. 그것이 caes라면, 설정 자식 설정 core.autocrlf 입력 –

+0

그게 무슨 뜻인지 설명해 주시겠습니까?캐리지 리턴 ... 파일에 여분의 줄을 추가한다는 의미인가요? –

+0

다음 형식 및 공백 섹션을 읽어보십시오. https://git-scm.com/book/gr/v2/Customizing-Git-Git-Configuration –

답변

1

git이 파일을 수정 된 것으로 표시하면 해당 파일이 다른 것입니다. 인쇄 가능한 문자를 사용하여 차이를 렌더링 할 수 없습니다 (그 이유는 git diff의 출력에 아무 것도 표시되지 않습니다). 바이트 단위 비교를 수행하면 차이점을 발견하게됩니다.

다른 사람들이 제안했듯이 가장 가능성있는 용의자는 Enter -key를 인코딩하는 Microsoft의 고유 한 방식입니다. Windows는 Enter, 0x0d0x0a (CR 및 LF라고도 함)을 누를 때마다 2 바이트를 씁니다. "git crlf problems"에 대한 Google 검색은 먼 길을 걸어야합니다. 당신이 두 개의 파일 - 하나 수정 가질 수 있도록

  1. 은 수정 된 파일의 복사본을 만들고 원본을 되돌릴 수 :

    정확히 차이가 무엇인지 직접 확인하려면

    , 여기 당신이 그것을 할 방법 하나는 아닙니다.
  2. 창문이 보이지 않으면 간단히 비교하십시오 : diff <(hexdump -C file1.txt) <(hexdump -C file2.txt)diff <(xxd file1.txt) <(xxd file2.txt). 0a0d
  3. 에 대해 알아볼 것입니다. Windows를 사용하는 경우 타사 도구가 필요합니다. 웹 페이지가 끔찍한데도 HxD은 그렇게 나쁘지 않습니다.

당신이 창문 만 윈도우 작업에 있다면, 당신이 할 수있는

git config --global core.autocrlf false

그래도 대안에 최대 읽기 조언을 것입니다. 당신이 그것을 억제 --ignore-space-at-eol, --ignore-space-change 또는 --ignore-all-space을 사용하는 것을 제외하고 기본적으로 https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration#__code_core_autocrlf_code

+0

이 인수는 내가 마지막에 개행을 추가하여 파일을 수정했다는 것을 가정하지 않고 그냥 볼 수 없습니까? 나는 문자 그대로 그들을 만지지 않았다. 이것들은 좋은 도구이지만 실제로 차이가 무엇인지 더 자세히 조사 할 것입니다 –

+0

예. 이 경우 제공된 명령을 사용하여 항상 확인할 수 있습니다. 파일을 변경하지 않았더라도 일부 프로그램은 열려있는 파일을 변환합니다. 컴퓨터에서 어떤 프로세스가 변경되었는지는 알 수 없지만 프로세스가 변경되었습니다. – gogstad

+0

나는 내가 알고있는 어떤 방법으로 그들을 열지 않았거나 그들과 상호 작용하지 않았다. 흠 ... –

0

는, 자식은 diff, 끝 변경을 선 보여집니다.

변경된 내용을 git diff으로 표시 할 수없는 또 다른 이유는 파일 사용 권한이 변경 되었기 때문에 "git status -v"를 사용하여 자세한 정보를 얻을 수 있습니다.