Git 使用快照作为上游
我的团队一直在开发一个git存储库。让我们称之为Git 使用快照作为上游,git,Git,我的团队一直在开发一个git存储库。让我们称之为mainrepo。现在我只需要外部人员完成一些事情,所以我复制了存储库中的文件,并创建了一个新的文件(我们称之为snapshotrepo) 现在,这两个存储库都包含一些更改,我希望git理解快照存储库的起点是mainrepo的特定提交,然后合并来自这两个repo的更改。或者从快照中选择一个新快照,然后不时推送一个新快照到那里 你会怎么做?还是复印已经是一个错误 还是复印已经是一个错误 对。您应该已经完成了一个浅层克隆(历史记录为1次提交。但是,在执
main
repo。现在我只需要外部人员完成一些事情,所以我复制了存储库中的文件,并创建了一个新的文件(我们称之为snapshot
repo)
现在,这两个存储库都包含一些更改,我希望git理解快照
存储库的起点是main
repo的特定提交,然后合并来自这两个repo的更改。或者从快照
中选择一个新快照,然后不时推送一个新快照到那里
你会怎么做?还是复印已经是一个错误
还是复印已经是一个错误
对。您应该已经完成了一个浅层克隆(历史记录为1次提交。但是,在执行快照的提交时也要这样做!)这样,您就能够共享提交,因为2存储库至少有一个相同的提交
您仍然可以尝试使用“git-rebase--on”来做一些事情,如果历史记录中的“externals”没有,则不包含合并
或者更难一点,但更好的长时间解决方案,在存储库中执行浅层克隆,从现有存储库中获取它,并执行“git替换”,以使用新的提交更改根提交
还是复印已经是一个错误
对。您应该已经完成了一个浅层克隆(历史记录为1次提交。但是,在执行快照的提交时也要这样做!)这样,您就能够共享提交,因为2存储库至少有一个相同的提交
您仍然可以尝试使用“git-rebase--on”来做一些事情,如果历史记录中的“externals”没有,则不包含合并
或者更难一点,但更好的长时间解决方案,在存储库中执行浅层克隆,从现有存储库中获取它,并执行“git替换”,以使用新的提交更改根提交 在git工具箱中,有一个隐藏的命令可以帮助您解决问题:
下面是一篇解释如何使用它的帖子:
这里有一种使用方法:
# start with a clone of your main repo :
git clone myrepo grafting
cd grafting
# add a copy of the 'external' repo as a remote :
git remote add external /path/to/external
git fetch external
# your main repo will be referenced as 'origin', the external repo as 'external'
# * you will need the hash of the original commit from which you created the
# inital 'external' commit : I will call this commit <base>
# * you need the hash of the first commit on external :
# I will call this commit <external>
git log --oneline external/master | tail -1
# "replace" the initial commit on external with the commit of your main repo :
git replace <external> <base>
#从主回购协议的克隆开始:
git克隆myrepo嫁接
镉嫁接
#将“外部”回购协议的副本添加为远程:
git远程添加外部/path/to/external
git获取外部
#您的主要回购将被引用为“来源”,外部回购将被引用为“外部”
#*您需要原始提交的哈希值,从中创建
#初始“外部”提交:我将此称为提交
#*您需要外部服务器上第一次提交的哈希值:
#我称之为承诺
git日志--单线外部/主|尾-1
#用主回购的提交“替换”外部的初始提交:
git替换
您现在应该能够使用git的大多数命令,就好像外部
是移植到源
内部一样
我的建议是:从这个
目录中,构建一个干净的新回购协议,然后将其作为您和外部团队的参考。在git工具箱中,有一个隐藏的命令可以帮助您解决问题:
下面是一篇解释如何使用它的帖子:
这里有一种使用方法:
# start with a clone of your main repo :
git clone myrepo grafting
cd grafting
# add a copy of the 'external' repo as a remote :
git remote add external /path/to/external
git fetch external
# your main repo will be referenced as 'origin', the external repo as 'external'
# * you will need the hash of the original commit from which you created the
# inital 'external' commit : I will call this commit <base>
# * you need the hash of the first commit on external :
# I will call this commit <external>
git log --oneline external/master | tail -1
# "replace" the initial commit on external with the commit of your main repo :
git replace <external> <base>
#从主回购协议的克隆开始:
git克隆myrepo嫁接
镉嫁接
#将“外部”回购协议的副本添加为远程:
git远程添加外部/path/to/external
git获取外部
#您的主要回购将被引用为“来源”,外部回购将被引用为“外部”
#*您需要原始提交的哈希值,从中创建
#初始“外部”提交:我将此称为提交
#*您需要外部服务器上第一次提交的哈希值:
#我称之为承诺
git日志--单线外部/主|尾-1
#用主回购的提交“替换”外部的初始提交:
git替换
您现在应该能够使用git的大多数命令,就好像外部
是移植到源
内部一样
我的建议是:从这个目录中,构建一个全新的回购协议,然后将其作为您和外部团队的参考。尝试在回购协议之间同步,就好像它们是同一回购协议中的分支一样,这对我来说就像是一个黑客。使用单个存储库有什么问题吗?主要是我不喜欢公开一个爱好项目的git历史。你能创建一个新的分支,然后压缩一些提交吗?在我看来,挑选樱桃应该谨慎使用,特别是如果你计划在某个时候合并完整的来源分支机构。尝试在回购协议之间进行同步,就好像它们是同一回购协议中的分支机构一样,这让我觉得是一种恶作剧。使用单个存储库有什么问题吗?主要是我不喜欢公开一个爱好项目的git历史。你能创建一个新的分支,然后压缩一些提交吗?在我看来,应该谨慎使用Cherry picking,特别是如果您计划在某个时候合并完整的源分支。