Git에서 작동하는 트리 라인 엔딩을 정규화하는 방법은 무엇입니까?
줄 끝이 일치하지 않는 저장소를 복제했습니다. .gitattributes
정규화하려는 파일의 텍스트 속성을 설정하는를 추가했습니다 . 이제 변경 사항을 커밋하면 메시지가 나타납니다.
warning: CRLF will be replaced by LF in FILE.
The file will have its original line endings in your working directory.
git이 파일의 작업 복사본을 정규화하도록하려면 어떻게해야합니까? 가급적이면 git이 전체 작업 트리를 정규화하고 싶습니다.
Git 클라이언트 2.16 이상에서는이를 수행하는 훨씬 더 간단한 방법이 있습니다. 그냥 사용git add --renormalize .
v2.16 이상을 사용하는 경우 다음을 사용하면됩니다.
git add --renormalize . # Update index with renormalized files
git status # Show the files that will be normalized
git commit -m "Introduce end-of-line normalization"
이러한 방향은 gitattributes에서 곧바로 나온 것입니다 . 이전 버전의 경우 문서 (v2.12 이전)에서 다른 답변을 제공합니다.
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"
편집 한 후에이 순서를 수행하십시오 .gitattributes
.
최신 정보
일부 사용자는 위의 지침에 문제가있는 것 같습니다. gitattributes에 대한 업데이트 된 문서 (2.12에서 2.14)는 새로운 지침 세트를 보여줍니다 (.gitattributes 파일 편집 후) :
git read-tree --empty # Clean index, force re-scan of working directory
git add .
git status # Show files that will be normalized
git commit -m "Introduce end-of-line normalization"
이것을 지적 해 주신 @ vossad01 에게 감사드립니다 .
또한 두 솔루션 모두 작업 복사본의 파일은 여전히 이전 줄 끝을 유지합니다. 업데이트하려면 작업 트리가 깨끗한 지 확인 하고 다음을 사용하십시오.
git rm --cached -r .
git reset --hard
이제 작업 트리에서 줄 끝이 정확합니다.
대체 방법 (사용 된 명령에서만 다름)
저장소에 보류중인 변경 사항이 없는지 확인하십시오.
$ git status
$ git stash
.gitattributes
CRLF 해석이 변경되도록 수정하십시오 .
$ echo "*.txt text" >>.gitattributes
$ git commit -m "Made .txt files a subject to CRLF normalization." -- .gitattributes
색인에서 데이터를 제거하고 작업 디렉토리를 새로 고칩니다.
$ git rm --cached -r .
$ git reset --hard
Git에서 제안하는 CRLF 수정 사항을 검토합니다.
$ git ls-files --eol
$ git status
$ git diff
Git 결정에 동의합니다.
$ git add -u
$ git commit -m "Normalized CRLF for .txt files"
Reload changes as if clean clone was done:
$ git rm --cached -r .
$ git reset --hard
The .gitattributes
settings will only affect new commits. If this repository has no history published (no others depending on it), you might want to go through the whole history. In Unix/Linux, you can use dos2unix(1)
to fix all files in combination with find(1)
, and using the history rewriting of filter-branch
(see the discussion in the git book) you can even clean up the full history of the project.
Use with utmost care, on a fresh clone. Get in contact with anybody who might have a clone, and advise them what you want to do.
The * text=auto option in .gitattributes leaves the Git repository in an 'illegal state' if it contains files with CRLF (Windows) line endings which are now marked as text (see https://marc.info/?l=git&m=154484903528621&w=2). The standard renormalize option does not work correctly with the LFS filters, so the instructions in the other answers or for example at https://help.github.com/en/articles/dealing-with-line-endings, do not work correctly. Instead these steps worked for us:
Situation:
- On Windows
- Git repository contained files with both CR and CRLF line endings
- Added * text=auto to .gitattributes (so not depended on user having set core.crlf=auto on Windows)
Also changed the -crlf to -text for LFS tracked files, not sure that is needed.
- Create a new branch from the branch with the line ending problem (assuming no uncommitted changes there): git checkout -b feature/doing-stuff-fix-eol
- Remove the LFS filters from .gitattributes (replace all 'filter=lfs diff=lfs merge=lfs ' with nothing)
- Commit and push: git commit -a -m "Disable LFS filters for EOL fix"
- Move to non-git folder
- Uninstall LFS globally: git lfs uninstall
- Create a new repository clone: git clone -b feature/doing-stuff-fix-eol [remote repository url] fix-eol
- Normalize the line endings: git add --renormalize . (note the dot to renormalize all files)
- Check only the correct files normalized. It should not include files normally handled by LFS!
- Commit and push (save the hash): git commit -m "Fix line endings"
- Move to non-git folder
- Install LFS globally: git lfs install
- Go to original repository clone and pull
- Checkout your original branch: git checkout feature/doing-stuff
- Cherry pick the eol fix commit and push: git cherry-pick [hash]
- Delete the eol branch and push
- Delete the eol repository clone (or keep around if you need to fix more branches)
ReferenceURL : https://stackoverflow.com/questions/15641259/how-to-normalize-working-tree-line-endings-in-git
'Programing' 카테고리의 다른 글
전체 프로젝트 또는 솔루션에서 사용하지 않는 네임 스페이스를 한 번에 제거 (0) | 2021.01.05 |
---|---|
IIS 7.5 + RESTFul 서비스에 대해 PUT 및 DELETE 사용, 확장 없음 (0) | 2021.01.05 |
Amazon SNS에서 "EndpointDisabled"받기 (0) | 2021.01.05 |
Swift에서 배열 "Join"기능의 목적 (0) | 2021.01.05 |
유니 코드 what ()의 예외 (0) | 2020.12.31 |