2012-03-29 6 views
6

친구와 저는 프로젝트에서 개별적으로 작업하고 있습니다. 처음에는 old-name이라는 폴더를 밀어 넣었습니다. 그 중간에 old-name 폴더의 이름을 new-name으로 변경하여 다른 프로젝트와 구별하기로했습니다 (단지 old-name이 너무 일반적이며 new-name이 더 구체적이라고 가정 해 봅시다). 그래서 친구에게 프로젝트 폴더의 이름을 new-name으로 변경하라고했습니다. 그리고 나서 우리는 별개로 일하고 있습니다.Git 이름 바꾸기 문제

이제 원격 서버 (new-name 폴더 아래)로 푸시했습니다. 서버에서 가져 오려고 할 때 이러한 모든 충돌 (이름 바꾸기/추가)이 발생하고 모든 단일 파일의 복사본이 하나 더 있습니다. 지금은 new-name 프로젝트입니다.

new-name/index.php (MINE) 
new-name/index.php~98789491981agsagasga98a914a98wt (his commit ID I believe) 

내 질문은 어떻게이 문제를 이름 바꾸기 문제없이 해결할 수 있습니까? 물론 나는 수동으로 충돌을 해결할 수 있지만 git가 내 저장소로 가져온이 새로운 추가 사본 때문에 체크하고 삭제할 파일이 너무 많습니다.

감사

답변

0

당신은 새 로컬 폴더에 새 작업 복사본을 풀다운해야 바로 옆에 코드를 먼저 일했다. 그런 다음 Diff style tool을 사용하여 작업을 비교하고 새 로컬 사본에 병합하십시오. 그런 다음 새로운 풀다운과 바움에 변경 사항을 커밋하면 커밋 된 변경 사항이 적용됩니다. 나는 이것이 당신이 한 일에 당신의 모든 변경 로그를 저장하지 않는다는 것을 안다.하지만 수동으로하는 것이 선택 사항이 아니라면 이것은 다음으로 좋은 일이다.

1

모든 파일을 추가하기 만하면됩니다. 단순한 이름 바꾸기는 아무런 차이가없는 것으로 식별되어 색인에서 제거됩니다. 따라서 '자식 상태'가로드 및로드 문제를 표시하더라도 '자식 추가 -A'후에는 남아있는 항목이 거의 없습니다 (나머지 모든 항목에는 실제 차이가 있음). 당신은 남쪽으로 가는지 쉽게 추적 할 수 있도록 즉시 ('git add -A'이전에) 새로운 브랜치를 체크 아웃해야한다.

1

그냥 추측 할 수 있지만, Git의 이름 바꾸기 감지 기능이 병합 할 때 이름을 감지하지 못하는 것 같이 들립니다. 이 디렉토리에 많은 파일이 있습니까? 모든 파일이 크게 수정 되었습니까?

merge.renameLimit 또는 diff.renameLimit 구성 설정의 값을 늘린 후 병합/풀을 다시 시도해보십시오. git help config에서 :

diff.renameLimit 
    The number of files to consider when performing the copy/rename 
    detection; equivalent to the git diff option -l. 

merge.renameLimit 
    The number of files to consider when performing rename detection 
    during a merge; if not specified, defaults to the value of 
    diff.renameLimit. 

또한 이름 바꾸기 유사성 감지 임계 값을 낮추기 위해 -Xrename-threshold=70을 시도 할 수 있습니다. git help merge (또한 git help pull에서)에서 :

rename-threshold=<n> 
    Controls the similarity threshold used for rename detection. 
    See also git-diff(1) -M. 

git help diff에서 : I 라인 엔딩이 유닉스 스타일과 윈도우 스타일 사이에서 변환 될 때 어떻게되는지 확실하지 않다

-M[<n>], --find-renames[=<n>] 
    Detect renames. If n is specified, it is a threshold on the 
    similarity index (i.e. amount of addition/deletions compared to the 
    file’s size). For example, -M90% means git should consider a 
    delete/add pair to be a rename if more than 90% of the file hasn’t 
    changed. 

참고. Git은 줄의 끝이 다른 경우에도 파일이 100 % 다르다고 생각할 수 있으므로 동일한 줄 끝을 사용하고 있는지 확인하십시오.

+0

git이 공백 변경을 무시하고 라인 종료 문제를 해결하도록 할 수 있습니다. http://stackoverflow.com/questions/861995/is-it-possible-for-git-merge-to-ignore-line-ending-differences도 참조하십시오. –