2012-03-19 3 views
15

우리는 git-subtree 프로젝트 (git 버전 1.7.9.4 사용)에서 작업하고 약간의 복잡성을 겪었습니다. foogit-subtree pull complications

git subtree add --prefix=foo [email protected]:foo.git master 

이제이 있었다 실질적인 변화를 우리가 이상적으로 그들을 부수 파일 중에 없었다, 그 변화를 병합하고 싶습니다 : 이전에 다른 사람이 몇 달 전에이 명령을 사용하여 하위 트리를 추가했다. 수입 이후 수정되었습니다.

나는 변화를 시도하고 병합하기 위해 세 가지를 시도했다.

첫째 :

git subtree pull --squash -P foo [email protected]:foo.git master 

예외가 발생합니다 : Can't squash-merge: 'foo' was never added.

둘째 :

git subtree pull -P foo [email protected]:foo.git master 

이 작동을 (일종의)하지만, 커밋의 모든 당기는의 문제를 가지고 수정 된 파일과 충돌합니다.

git pull --squash -s subtree [email protected]:foo.git master 

이 출력 Automatic merge went well; stopped before committing as requested으로 내게 원하는 결과를 제공하고 (정확한 함량으로) 수정 된 모든 파일들이 보여주는 :

마지막으로,이 시도.

이상적으로는 처음으로 git-subtree 버전을 계속 사용하고 최종 버전에 가까운 출력을 얻고 싶습니다. 우리가 앞으로도 계속해서 마지막 버전을 사용해야한다면, 우리는 그렇게 할 것입니다. 그러나 중간 버전이 충돌하는 동안 왜 마지막 버전이 병합 충돌을 일으키지 않는지 조금 혼란 스럽습니다.

도움을 주시면 감사하겠습니다.

답변

6

나는 동일한 문제가 있었는데, 내 경우에는 초기 하위 트리 커밋이 마스터 분기로 병합 됨으로 인해 발생하는 것으로 보입니다. 그것은 하위 트리처럼 보인다 https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L224

git-subtree-dir: foo에 대한 당신의 자식 로그를 greps하지만 적절한 커밋을 찾을 수 없습니다 :이 발견 된 하위 트리 소스를 통해 찾고

. 시도 git log --grep="git-subtree-dir: foo/*\$", 그리고 병합 커밋되는 것과 같은 커밋 그 이상한 뭔가가 있다면, 그 문제가 될 수 있습니다.

괴롭히는 병합 충돌을 제외하고는 스쿼시없이 당기는 것만으로 나를 위해 일했습니다. 나는 그때 임시 변통에서 나는 그 다음 git merge --squash 지저분한 역사를 피하기 위해 다른 지회에 갔다. 대신에 너무 리바이스 될 수있었습니다.

+1

나는 끌어 내려 할 때 접두사 옵션에 하위 폴더가 누락되어서 발생하는 것으로 밝혀진 동일한 문제가있었습니다. 오류 메시지가이 오류에 대한 어떤 표시도하지 못하기 때문에 이것을 설명으로 추가하면 문제 해결이 여기에 도움이됩니다. –

+0

감사합니다. 유용합니다. 하위 트리를 하위 트리에 추가 한 후이 하위 트리를 이동 한 관련 문제가 발생했습니다. –

1

하위 트리를 가져올 때마다 sourcetree 1.7.0과 동일한 오류 Can't squash-merge: 'foo' was never added.이 발생했습니다. 그러나 서브 디렉토리를 사용하고 있기 때문에 필자의 경우가 다르다고 생각합니다.
git -c diff.mnemonicprefix=false -c core.quotepath=false subtree pull -P dir1\subdir1 --squash remote-repo master

과 분명히 우리가 망할 놈의 배쉬 (망할 놈의 버전 2.6.1.windows에 다시 시도한다면, 다음과 같이

Sourcetree 뭔가를 않습니다.1)이면 다음과 같습니다.
git subtree pull -P "dir1\subdir1" --squash remote-repo master

그러나 실패했습니다.
git subtree pull -P "dir1/subdir" --squash remote-repo master

난 아직도 몇 가지가 있다고 생각 : 나는 그것을 작동하게하는 것으로이 솔루션은 다음과 같은 명령을 힘내 배쉬를 사용하는 것입니다
git subtree pull -P dir1/subdir1 --squash remote-repo master

: 명령 구문은 잘하지만 다음도 실패 Git의 명령 행 처리 엔진에서 수행 할 작업.