developer tip

Git이 이전에 이동 한 파일을 확인하도록하기

optionbox 2020. 11. 18. 08:56
반응형

Git이 이전에 이동 한 파일을 확인하도록하기


나는 생각하지 않고 수동으로 많은 파일을 이동했으며 파일이 실제로 다른 파일이 아니라 단지 이동되었음을 인식하도록 git을 얻는 방법을 찾을 수 없습니다. 이전을 제거하고 새 항목을 추가 (따라서 기록을 잃음)하거나 git-mv로 모든 변경 사항을 다시 실행하는 것 외에 다른 방법이 있습니까?


나는 이미 이것을한다고 생각한다. 이제 내가 틀릴 수 있지만 git은 파일 시스템에서의 위치 또는 델타 / 차이를 기반으로하지 않는 내용을 기반으로 파일을 추적한다는 것을 읽었습니다. 스택에서 파일이 제거되고 다시 추가되는 것처럼 표시한다고 생각하지만 한 번 시도했지만 앞에서 언급 한 git이 일을 추적하는 방식으로 인해 여전히 기록이 유지되었다고 생각합니다.

누군가가 내가 올바른지 확인하는 데 여전히 도움이 될 것입니다. 질문을 잘못 이해했다면 죄송합니다.


이미 제거되거나 이동 된 파일을 git이 제거하도록하려면 다음을 입력하십시오.

git add -u

git개별 파일의 기록을 추적하지 않으며 이동 및 복사를 특별히 처리하지 않습니다. 즉, 이동 또는 복사가 발생했음을 나타내는 특별한 메타 데이터가 없습니다. 대신 각 git 커밋은 작업 트리의 전체 스냅 샷입니다.

이동을 보려면 변경된 파일을 나열하는 옵션을 추가로 git log제공 할 수 있습니다.-M

git log --summary -M

git 커밋 히스토리에서 인접한 트리를 살펴보고 각 커밋에 의해 이동 된 파일이 있는지 유추합니다.

복사본을 찾고 이름을 바꾸려면 -C옵션을 사용할 수 있습니다.이 옵션을 두 번 제공하여 약간의 성능을 희생하면서 git이 가능한 복사본 소스를 찾기 어렵게 만들 수 있습니다.

git log --summary -M -C -C

참고 파일 기록을 저장하지 않는 자식으로 (단지 역사를 커밋), 당신이 한 경우에도 git rmgit mv파일, 당신은 어떤 역사를 잃지 않을 것입니다. 경로에 대한 모든 변경 사항은 여전히 ​​기록되고 git log.


Git이 (보다 일반적인) 명시 적 이름 변경 추적 대신 이름 변경 감지수행하는 이유 git log 경로 제한이 작동 하는 방식 을 더 잘 이해하려면 Git 유지 관리자 인 Junio ​​C Hamano가 작성한 Linus의 궁극적 인 콘텐츠 추적 도구 블로그 게시물 (및 참조)을 읽어보십시오 .


새 파일을 git 외부의 이전 이름과 경로로 다시 이동 / 이름을 바꾼 다음을 사용 git mv하여 이동 만 수행 할 수 있습니다. 예를 들어 bash에서 :

mv $NEW $OLD && git mv $OLD $NEW

그것의 다소 성가신 일을 당신이 손으로 그것을해야 특히,. 그러나 네임 스페이스 또는 클래스 이름을 변경하는 것과 같은 다른 변경 사항을 무단계로 남겨 두어 검사하고 의도 한 경우에만 준비 할 수 있다는 장점이 있습니다.


1 더 나은 대안을 찾길 바라며 답을 찾으면 업데이트하겠습니다.

예 : 나는 파일의 무리가 FOM 이동 oldDirnewDir와 다른 변화에 적극적으로 시작했다. 이제 다른 수정 사항을 확인하고 싶습니다. 사용 한 줄에 다음과 같은 결과 :

git status --short |
gawk '/^\?\?/ && match($0, /newDir\/(*.\.cs)/, a) {print "newDir/" a[1] " " "oldDir/" a[1]}' |
xargs -n 2 bash -c 'mv $0 $1; git mv $1 $0'

이제 git status이름이 "커밋 될 변경 사항"으로 표시되고 "커밋을 위해 준비되지 않은 변경 사항"아래에 텍스트 수정 사항이 표시됩니다.


파일을 이동하고 편집하면 더 이상 이동 파일로 인식하지 않고 새 파일로 인식하여 기록을 잃어 버렸습니다.

내가하는 일은 2 개의 분리 된 커밋을 만드는 것입니다. 하나는 파일을 이동할 때 하나는 파일을 편집하는 것입니다. 이런 식으로 나는 역사를 유지합니다.

참고 URL : https://stackoverflow.com/questions/1430749/getting-git-to-acknowledge-previously-moved-files

반응형