将git仓库移动到第二台电脑?

86

我有一个包含简单本地git仓库的项目,我想要将这个项目(包括文件夹等)移动到另一台电脑上,并从那里开始工作。我不希望在旧电脑上留下任何东西(当然除了其他git项目)。我希望就像一直从新电脑上工作一样。

我能否简单地将所有文件移到那台计算机上,或者密钥会出现问题吗?我是否应该在两台计算机上使用相同的密钥?如果不能简单地移动所有文件夹,我该怎么办?我想避免设置和学习使用服务器的麻烦,因为这似乎很复杂,而且我不想改变我的工作流程。

6个回答

78

针对您的情况,最好的方法是将文件夹(使用复制、SCP、CP、Robocopy中的任何一种)复制到新计算机并删除旧文件夹。

我完全不同意@Pablo Santa Cruz提出的克隆是您正在做的事情的范例。不,它不是。您正在将存储库移动到新计算机。

我为什么不喜欢使用克隆:

  • 它为克隆存储库中的每个分支创建远程跟踪分支。您正在移动,旧存储库已失效。
  • 所有远程分支和其他引用都被完全忽略。
  • 如果存在挂钩,则不能获取这些挂钩,您可能会忘记它们!
  • 您无法使用git reflog或其他手段获取“丢失”的提交等。 这可能不是一个巨大的问题,特别是如果存储库充当服务器,但需要注意。

如果您搜索备份git存储库的方法,git克隆不会成为前几个答案。因此,不应将其用于移动存储库!我还觉得只使用git clone不能作为正确的答案,因为git clone具有--mirror选项,该选项保留存储库,这意味着git clone存储库不同于git clone --mirror存储库(除了裸库之外,差异主要是我上面提到的)。我会进行复制,因为我知道使用复制后会得到相同的存储库!

何时考虑使用git克隆:

  1. 它更快,因为Git在克隆过程中进行了一些优化
  2. 您的新计算机上可能有不同的Git版本,复制可能会使存储库在其他版本中无法使用(现在不太常见)。但实际上,这也可以是使用复制的另一个优点,因为它会通知您新计算机具有不同的Git版本。

19
其他人把这个过程想得太复杂了。将整个项目目录复制到新机器上即可。完成。 - kubi
听起来不错。我记得要生成一个密钥或者什么的。如果我只是复制它并删除旧的存储库,那一切都会正常工作吗? - mk.
我读到过可以使用类似于“*:*”这样的东西来保留远程分支,但我不确定确切的语法,而且这是一个谷歌关键字 -- @manojlds,你知道这方面的任何信息或者能否详细说明一下吗?我觉得,如果分支被保留,那将解决大部分重要问题(除了钩子)。 - Robert Martin
一个简单得多的答案:https://dev59.com/e4Pba4cB1Zd3GeqPvrHX#26029296 - lasec0203
此外,还要把你的本地存储库和未推送的分支添加到列表中,复制文件夹时应该也会同时保留它们。 - NBcrafts
很想给这个点赞,但你没有回答完整的问题... 钥匙呢? - undefined

5
git bundle子命令旨在离线传输存储库。
在源计算机上,在Git工作区中执行以下命令:
$ git bundle create --progress myproject.bundle --all

然后将创建的文件myproject.bundle转移到目标机器上,并在那里执行以下命令:

$ git clone myproject.bundle myproject

更多信息,请查看bundle子命令的手册页

1
哇,这太完美了,正是我需要的。对于未来的旅行者:如果你有两台没有互联网连接的计算机(或者可能是你的来源/上游服务在某个当前不可访问的VPN后面),那么这是传输代码库的完美方式。此外,它在PC / Mac之间干净地工作,并尊重您的git配置以实现兼容性。 - Zee2

4

把数据复制到另一台计算机上就足够了。使用git clone几乎是相同的事情,但它会将您从中克隆的计算机设置为远程起源,这可能不是您想要的。


对,那不是我想要的。我想把项目移到新机器上,而原机器上不留痕迹。但是仅仅移动它会弄乱我的密钥吗?我需要在新机器上设置新的密钥吗? - mk.
不,它们绝对不是同一件事。Git clone会给你一个远程存储库的完全副本。而OP想要的是他本地存储库的完全副本。这两件事绝对不是同一件事。例如,你可能有额外的资源文件夹和文件,本地存在但没有推送到远程。 - Charles Robertson

1

在进行项目时,如果你被迫换到一台新电脑上。

  1. 保存文件并将文件复制到新电脑上
  2. 在新电脑上安装git并创建ssh密钥
  3. 在每个项目文件夹中运行以下命令

    git remote update


-2
因为每个克隆本身也是一个仓库,所以只需在第二台计算机上克隆第一个。

-3

我建议你不要复制,而是使用clone来克隆代码库。克隆是实现你想要完成的任务的正确范例。克隆的项目也将包含所有的git元数据和信息。

在目标机器上:

$ git clone git://your-repo/proj proj

可以使用ssh://或者http://协议来访问代码库,而不是使用git://。更多信息请参考git手册。


在电脑1上提交并推送repo,然后在电脑2上克隆。在电脑2上进行提交和推送。在电脑1上拉取。记得查看说明文档。 - RyanScottLewis
1
@coolryguy:这意味着存在第三个“中央”存储库。 - KingCrunch
我之前可能没说清楚 - 我并不是在复制,而是在移动。我不想让它占用原始计算机的空间。我应该继续这样做,然后删除旧文件夹吗? - mk.
1
这里解释了如何临时通过git://协议使原始repo可用,以防您的原始机器上没有运行ssh服务器。 - just_doug

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