2010-11-24 5 views
1

바이너리 데이터로 가득 찬 디렉토리를 원격 서버로 보내고 싶습니다.git squash 다음에 푸시가 데이터를 다시 전송합니다.

이 작업에 며칠이 소요될 수 있으므로 로컬에서 커밋하고 한 번에 하나의 파일을 푸시합니다 (모든 것을 한 번에 커밋하고 푸시하면 전송이 중단되면 처음부터 다시 시작해야합니다).

모든 것이 전송되면이 모든 커밋을 하나에 스쿼시하고 싶습니다. 로컬로 스쿼시 한 ​​다음 밀어 넣으면 모든 데이터가 다시 전송됩니다! 그것은 나의 전략의 목적을 무너 뜨린다.

어쩌면 리모컨에 로그인하여 원격으로 스쿼시 작업을 반복 할 수도 있지만, 내가하고 싶은 일을하기에 더 좋은 방법이있을 것입니다. 모든 합리적인 데이터가 이미 서버에 있음을 git에 알리는 방법은 무엇입니까?

답변

1
우선, 바이너리가 가장 잘 VCS에서 관리되지 않는

)

둘째, 당신이 특정 푸시 포함 아무것도처럼 (커밋 수신 할 때, 당신은 설치 원격 REPO에 후크가 호박을 수행 할 수해야하는 경우 특별한 파일은 이전의 모든 커밋이 부숴 질 수 있음을 확인합니다).
정확한 구현에 대해서는 잘 모르겠지만 유사한 역사를 보장하기 위해 git 스쿼시와 관련된 모든 솔루션이 로컬 및 원격 측면 모두에서 수행되어야합니다.

그리고 원격 저장소에 대한 다른 제공자의 커밋이있는 경우 매우 안전합니다. 그럼 역사는 당신의 로컬 repo와 원격 측에서 완료되었을 것입니다간에 정확하게 동기화하는 것은 불가능합니다 ...
원격 측면에 스쿼시가 뒤따른 그런 특별한 푸시 후 행동의 유일한 다른 과정은 될 것입니다 현재 브랜치의 이름을 변경하고 원격 브랜치를 당겨서 해당 브랜치의 로컬 버전을 원격 측에 리셋하십시오.

+0

답변 해 주셔서 감사합니다. 사실, 내 작업에 대해, 내가 이름 바꾸기를 추적 할 수있는 유일한 애인이기 때문에 자식을 사용한다. 내 사진 모음을 구성/정리하기로 결정하면 git은 모든 것을 서버에 다시 업로드하지 않는다 (rsync는). 그렇다면 나는 리모콘에 훅을 세울 가치가 없다고 생각합니다. 나는 쌓인 역사와 함께 살 것입니다. – rafak

0

저는 잘 모르겠지만 자식이 이미 있다면 개체를 전송하지 않을 것이라고 생각합니다. 엄밀하게는 커밋은 바이너리 객체를 포함하지 않고 객체에 대한 참조를 포함하는 트리에 대한 참조만을 포함합니다. 고유 한 ID (SHA)로서의 각 객체는 이미 존재하는지 여부를 알아야합니다. 따라서 일반적으로 두 번째 객체를 보낼 필요가 없습니다.

그냥 시도해보세요. 아무 것도하지 않고 원하는대로 작동해야합니다.

+0

그게 내가 생각한 것이지만, 밀고하면 자식이 전송 중이다 (새로운 MB의 부모가 새로운 squashed 커밋의 것부터 시작해서 해당 시간이 걸린다). 그러나 리모컨에서 디스크 사용량을 확인할 때 새롭게 전송 된 데이터가 즉시 서버 측에서 무시되는 것처럼 (거의) 동일하게 유지됩니다. – rafak

+0

git push를 시도 했습니까? – mb14

+0

예, 변경 사항이 없습니다 (그리고 의사가 --thin이 기본값 임). – rafak

관련 문제