我有两个相同远程仓库的git克隆,我在克隆A中创建了几个stash,现在想把这些stash移到克隆B中。
[克隆A] ----存储---〉[克隆B]
我能想到的一个解决方法是为每个隐藏创建分支,并通过克隆A将该分支推到远程,然后将这些分支拉到克隆B。但这不是我喜欢做的。有谁能提出一个更简单、更干净的方法(比如复制)吗?
gudnpqoy1#
你应该可以复制.git/refs/stash来保存最新的stash,复制.git/logs/refs/stash来保存栈中的其他所有stash,实际上你甚至可以提取refs/stash来保存最新的stash。但这可能无法正常工作,因为存放的提交对象不会出现在复制目标中。您可以设置.git/objects/info/alternates,以便在A存储库中搜索丢失的对象,从而使复制在目标中工作。你可能应该使用git worktree来为同一个远程存储库创建多个工作树,而不是多个克隆,这样可以保存很多空间,而且我认为你应该能够共享存储库。
.git/refs/stash
.git/logs/refs/stash
refs/stash
.git/objects/info/alternates
git worktree
s5a0g9ez2#
多种方式:
Clone A
.git/
Clone B
refs/heads/
refs/cloneA/stash1
git pull
gmxoilav3#
您可以将隐藏文件作为补丁文件从原始位置复制到新位置。(而不是提交它们),然后把它藏在新的位置。这里有一篇关于这样做的帖子。我只是按照前两个答案的步骤做,效果很好。只是要记住,你任何未跟踪的文件都不会自动包含在补丁中。你也可以对未跟踪的文件执行git add操作,创建一个隐藏文件,然后我希望它会成为补丁的一部分(未确认)。下面是我所提到的步骤的链接:将隐藏导出为修补程序。
3条答案
按热度按时间gudnpqoy1#
你应该可以复制
.git/refs/stash
来保存最新的stash,复制.git/logs/refs/stash
来保存栈中的其他所有stash,实际上你甚至可以提取refs/stash
来保存最新的stash。但这可能无法正常工作,因为存放的提交对象不会出现在复制目标中。您可以设置
.git/objects/info/alternates
,以便在A存储库中搜索丢失的对象,从而使复制在目标中工作。你可能应该使用
git worktree
来为同一个远程存储库创建多个工作树,而不是多个克隆,这样可以保存很多空间,而且我认为你应该能够共享存储库。s5a0g9ez2#
多种方式:
Clone A
的.git/
文件夹复制到Clone B
计算机上的某个位置,并将Clone A
的此“本地副本”用作Clone B
的远程副本Clone A
中的提交推送到中央存储库,但不在分支下(分支存储在refs/heads/
中,如果你推送到refs/cloneA/stash1
,其他人默认的git pull
将不会获取这些引用)gmxoilav3#
您可以将隐藏文件作为补丁文件从原始位置复制到新位置。(而不是提交它们),然后把它藏在新的位置。这里有一篇关于这样做的帖子。我只是按照前两个答案的步骤做,效果很好。只是要记住,你任何未跟踪的文件都不会自动包含在补丁中。你也可以对未跟踪的文件执行git add操作,创建一个隐藏文件,然后我希望它会成为补丁的一部分(未确认)。下面是我所提到的步骤的链接:将隐藏导出为修补程序。