git 将存储列表从一个克隆或文件夹复制到另一个克隆或文件夹

mwyxok5s  于 2023-02-17  发布在  Git
关注(0)|答案(3)|浏览(322)

我有两个相同远程仓库的git克隆,我在克隆A中创建了几个stash,现在想把这些stash移到克隆B中。

[克隆A] ----存储---〉[克隆B]

我能想到的一个解决方法是为每个隐藏创建分支,并通过克隆A将该分支推到远程,然后将这些分支拉到克隆B。但这不是我喜欢做的。
有谁能提出一个更简单、更干净的方法(比如复制)吗?

gudnpqoy

gudnpqoy1#

你应该可以复制.git/refs/stash来保存最新的stash,复制.git/logs/refs/stash来保存栈中的其他所有stash,实际上你甚至可以提取refs/stash来保存最新的stash。
但这可能无法正常工作,因为存放的提交对象不会出现在复制目标中。您可以设置.git/objects/info/alternates,以便在A存储库中搜索丢失的对象,从而使复制在目标中工作。
你可能应该使用git worktree来为同一个远程存储库创建多个工作树,而不是多个克隆,这样可以保存很多空间,而且我认为你应该能够共享存储库。

s5a0g9ez

s5a0g9ez2#

多种方式:

  • 通过ssh:添加一个存储库作为另一个的远程存储库,并且在它们之间直接推/拉,
  • Clone A.git/文件夹复制到Clone B计算机上的某个位置,并将Clone A的此“本地副本”用作Clone B的远程副本
  • Clone A中的提交推送到中央存储库,但不在分支下(分支存储在refs/heads/中,如果你推送到refs/cloneA/stash1,其他人默认的git pull将不会获取这些引用)
gmxoilav

gmxoilav3#

您可以将隐藏文件作为补丁文件从原始位置复制到新位置。(而不是提交它们),然后把它藏在新的位置。这里有一篇关于这样做的帖子。我只是按照前两个答案的步骤做,效果很好。只是要记住,你任何未跟踪的文件都不会自动包含在补丁中。你也可以对未跟踪的文件执行git add操作,创建一个隐藏文件,然后我希望它会成为补丁的一部分(未确认)。下面是我所提到的步骤的链接:将隐藏导出为修补程序。

相关问题