"text"속성을 사용하여 파일을 정규화 한 후 git이 마스터 브랜치를 체크 아웃하고 캐리지 리턴을 제거하도록하려면 어떻게해야합니까?


104

좋아요, 그래서 다음 .gitattributes과 같은 줄로 파일 을 추가 했습니다

*.css text
*.js text
etc...

그런 다음 http://git-scm.com/docs/gitattributes#_checking-out_and_checking-in 의 지침을 따랐습니다.

$ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

그러나 이제 내 작업 사본에는 여전히 캐리지 리턴이 있습니다! 보관하고 싶은 추적되지 않은 파일이 있습니다. 정규화 된 파일로 마스터 브랜치를 다시 체크 아웃하려면 어떻게해야합니까?

리포지토리를 복제하면 캐리지 리턴이없는 모든 파일이 있기 때문에 파일이 리포지토리에서 정규화된다는 것을 알고 있습니다.

답변:


267

아 아! 이전 커밋을 체크 아웃 한 다음 마스터를 체크 아웃합니다.

git checkout HEAD^
git checkout -f master

5
이 해결 방법에 대해 감사하지만 "checkout -f"가 실제로 다시 체크 아웃을 강제하지 않는다는 것은 git의 눈부신 문제입니다. 또 다른 woraround는 모든 작업 복사본 파일을 먼저 제거하는 것입니다 (즉, .git dir을 제외한 모든 파일).
pfalcon 2014 년

아, 네, 감사합니다! 그 말을 듣고 관심있는 파일을 제거하고 체크 아웃을 실행할 수 있다고 생각합니다. 나를 위해 실제로 수정하려는 파일은 하나뿐이었습니다. 그러나 물론 모든 파일, 수백 또는 수천 일 수 있습니다.
Jason

이것은 git 1.8.3 (mac)에서 다음과 같이 실패합니다. 오류 : pathspec 'HEAD ^'가 git에 알려진 파일과 일치하지 않습니다.
dval

@dval,이 게시물에 대한 편집 내용을 살펴보면이를 수행하는 다른 방법을 볼 수 있습니다. 나도 Mac에서 실행 중이며 이것은 나를 위해 일했습니다. 또한 git을 2+로 업그레이드하는 것이 좋으며 Homebrew를 사용하여 안전하게 유지 관리 할 수 ​​있습니다.
Jason

2
이것은 실제로 작동하지 않습니다. GIT는 두 커밋 사이에 변경된 파일 만 업데이트합니다 (일부 예외 제외). 예를 들어 저장소가 새로운 경우 두 개의 커밋 만 있고 첫 번째 커밋이 비어 있으면이 솔루션이 작동합니다. 그렇지 않으면 mechsin의 답변에 설명 된대로 모든 파일을 강제로 삭제해야합니다.
jstine

16

다른 사람들이 지적했듯이 리포지토리의 모든 파일을 삭제 한 다음 체크 아웃 할 수 있습니다. 이 방법을 선호하며 아래 코드로 수행 할 수 있습니다.

git ls-files -z | xargs -0 rm
git checkout -- .

또는 한 줄

git ls-files -z | xargs -0 rm ; git checkout -- .

나는 항상 그것을 사용하고 아직 어떤 단점도 찾지 못했습니다!

약간의 추가 설명은은 -z으로 각 항목 출력의 끝에 위에 널 문자를 추가 ls-files하고,이 -0이야기 xargs는 그 널 (null) 문자로 수신 된 출력을 구분합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.