2017-09-22 10 views
0

두 개의 리포지토리가 있습니다. 둘 다 읽기/쓰기가 가능합니다. (대개 하나는 코드하지만 다른 코드도 코딩합니다.) 내 작업 흐름은 일반적으로 로컬 레포에서 작업하고, 변경 사항을 테스트 할 준비가되면 프로젝트를 실제로 빌드하는 다른 원격 저장소로 커밋을 푸시합니다. 그러나 어떤 이유로 로컬 저장소에서 원격 저장소로 푸시 할 때 저장소가 변경되면 즉, 저장소가 업데이트되지만 변경 사항의 역인 경우 (예 : 원격 저장소를 해당 저장소로 다시 가져 오는 변경 사항) 프리 - 푸쉬 상태)가 인덱스에 등록된다. 예를 들어 원격 git repo로 이동하면 인덱스에 오래된 트리가 유지됩니다.

, 나는 내가 로컬 // This is a comment that has been updated 말을 업데이트 한 다음 내 원격의 repo에 푸시 한 코멘트 // This is a comment을 가진 파일을 가지고 있다고, 나는 내 원격의 repo에서 다음을 얻을 :

remote_repo$ git diff --cached 
-// This is a comment that has been updated 
+// This is a comment 

분명히 git reset --hard을 실행하여 같은 상태로 가져올 수는 있지만이를 수행하거나 자동화하는 다른 방법이 있습니까? 나는 대부분의 사람들이 git reset --hard을 실행하는 포스트 수신 훅을 추가 할 것을 제안 할 것이라고 기대하지만, 이것은 깨끗한 방법으로 구성 가능할 것으로 기대된다.

+0

사이드 노트 :이 시점에서 인덱스의 내용은 푸시되기 전의 인덱스 *에 있던 것이 전부입니다. 그것이 문제의 근원입니다 : 인덱스는'HEAD' 커밋이었던 것과 일치하지만,'HEAD' 자체는 어떤 식 으로든 변경되었으며 이제는 새로운 커밋을 해결합니다. 하드 리셋이 필요하지 않습니다 (혼합 리셋만으로 충분합니다). 그러나 일반적으로 이것은 약간의 함정입니다. – torek

+0

도회, 그것은 회고 적으로 의미가 있습니다. 나는 그것이 어색한 작업 흐름이라는 것을 알고 있지만, 나는 repo를 소유하고 있으며 어느 누구도 액세스하지 못하므로 위험은 정말 불편합니다. – DIMMSum

답변

2

아마도 다른 저장소에서 현재 체크 아웃 된 지점으로 푸시 중입니다.

적용 가능한 구성 옵션은 receive.denyCurrentBranch입니다. 그것은 원래의 목적입니다. (그리고 나는 현재의 디폴트를 믿습니다 ... 전에이 옵션을 만나지 않았다면 놀랍습니다.) 단순히 현재 헤드를 업데이트 할 푸시를 거부함으로써 "인덱스의 역변환"상황을 피하는 것이 었습니다 .

작업 트리를 "다른"저장소에 보관하는 한 케이크를 가지고 먹을 수있는 이유가 없습니다. receive.denyCurrentBranchupdateInstead으로 설정하면 머리말을 업데이트하고 머리글을 업데이트 한 다음 색인 및 작업 트리를 동기화하기 위해 체크 아웃을 수행합니다 (청결한 경우).

위험하게 살고 싶다면, push-to-checkout 후크를 사용하여 해당 제한을 구성 할 수도 있습니다.

UPDATE는 - 질문에 언급되지 않은 연결 작업 나무 때문에이 각도에 대해 생각하지 않았습니다 만, torek 지적과 같이 당신이 연결 작업 나무를 사용하는 경우 (예 : git worktree add)에 환매 특약의 푸시를 수신 , receive.denyCurrentBranch 설정은 연결된 작업 트리가 체크 아웃 된 분기를 보호하지 않습니다. 주 작업 트리 만 보호됩니다. 필요한 경우 연결된 트리에 대해 updateInstead의 동작을 모방 한 후 수신 후크를 작성할 수 있다고 생각합니다.

+0

푸시는'git worktree add'와 잘 작동하지 않는다는 것을 알아 두어야합니다 : https://stackoverflow.com/q/41158057/1256452 – torek