Git:将代码仓库克隆至新的代码仓库

33
我正在使用Git(在bitbucket上),并且拥有一个存储我的代码的仓库。现在我想将此代码用于另一个完全不同的项目,并进行大量修改。
我了解应该将常见组件抽象为第三方库并使用它,但是为了说明问题,如果我想要将当前存储库克隆到一个新的存储库中,是否可以在不手动复制代码并推送到新存储库的情况下实现?
4个回答

61

首先克隆您想要使用的存储库。如果您希望所有操作都在当前文件夹中进行,则可以跳过此步骤。

git clone file:///path/to/repo/

克隆将带入该目录中指定的远程。所以您需要删除不需要的远程

git remote rm <remote>

在创建远程仓库后,添加您要使用的那些。

git remote add origin <url>

你还需要使用--set-upstream-to-u告诉Git这是远程存储库,该分支将更新到,假设你正在主分支(或默认分支)上。

git push -u origin main

然后你需要决定要保留和添加到远程的哪些分支。如果你想要推送所有的分支,只需执行命令git push --mirror。这将会推送你的所有标签和远程分支。但由于我们在早前的步骤中编辑了你的远程分支,所以这应该不是一个问题。

如果你只想保留其中几个分支,可以使用git push -u origin <branch>命令来推送每一个你想要的分支。


1
很好的回答。我认为Github和其他Git仓库托管平台现在已经将默认分支名称从master更改为main了。不确定您是否想在您的回答中更新这一点。 - CodeAddictJack
1
@TekkSparrow 谢谢,这是值得的改变。稍后我会回来,也许会在答案中添加更多的清晰度。有关于 Git 邮件列表讨论更改默认设置以匹配大多数 Git 云服务所做的更改,请参见 https://www.spinics.net/lists/git/msg393548.html要更改所有新存储库的默认分支名称,请参见 https://dev59.com/rlUK5IYBdhLWcg3wyidl#63218244 - RyPeck
请注意,这种方法将保留原始存储库的 Git 历史记录。 - user566245
这似乎没有保留所有未完成的分支及其历史记录。不过我可能错了。 - wayofthefuture

16

您可以使用set-url将现有的存储库推送到新存储库中:

  1. cd file:///path/to/repo/
  2. git remote set-url origin <new-repo的url>
  3. git push -u origin master

4
如果你只需要现有仓库的一个特定分支,那么你可以将该分支直接拉取到新仓库中。
这样做非常快速,因为只有该分支中的提交被拉取。
例如:
git init newRepo && cd newRepo
git pull <existing repo url> <branch (optional)>

2
你可以克隆现有的存储库并删除远程,或者在文件系统上复制文件夹并更改/删除一个副本中的远程。但由于你的问题不是很清楚,这里还有另一件可能的事情:向现有的远程(除了origin)添加另一个远程,并将其推送到该远程。

嗨,我认为这是添加新远程并将其推送的方法。谢谢。 - Aly
取决于他想要另一个本地克隆还是另一个远程存储库。 - mnagel

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