如何仅保留Git提交历史的最新快照?

4

我有一个本地的git仓库,使用以下命令进行克隆:

git clone --depth 1 my_repo_url

这样我只需要最新的提交(commit)就可以了,不用担心保留大量历史记录。

如果我现在执行git pull命令,可能会从远程repo获取两个以上的提交(commit)。我的目标是更新我的repo以维护最新的提交(commit),而不是整个历史记录。但是,我不想使用压缩/重置(squashing/rebasing)操作,因为这将实际上更改我的本地历史记录,并在尝试从远程服务器再次拉取(pull)时导致冲突。

基本上,如果我有如下的提交历史:

commit1 --> commit2 --> commit3 --> commit4

我只想维护在提交(commit)4处repo的快照(snapshot)。

但我不想压缩所有这些提交(commit),因为那样会留下提交(commit) 4*,其哈希与原来的提交(commit)4不同,因此在尝试再次从源头(origin)拉取(pull)时会导致冲突。

我也不想再使用git clone,因为这将无法充分利用以下事实:如果远程服务器上最新提交(commit)的更改很小,我只需要通过网络发送一个小差异。


1
不想保留多个上游历史提交的原因是...每个提交的巨大大小? - Magnus Bäck
@Magnus Back:没错。许多被跟踪的文件都是大型二进制文件。 - rmacqueen
1
那么Git不是正确的工具:https://dev59.com/qmMm5IYBdhLWcg3wFL04#19494211 - VonC
@VonC,您指出的特定解决方案是GPL许可的,这可能对此用户不可接受。但是,该链接中列出了其他解决方案,对此我表示感谢。 - BlackVegetable
@BlackVegetable 我并没有指出一个特定的解决方案(否则我会写一个答案而不是评论)。我是在提到一个帖子,解释了为什么 Git 内部机制不适合处理大文件和大量文件。我同意 GPL 工具可能也不是合适的工具。 - VonC
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接