【问题标题】:Point current repo to a different repo [duplicate]将当前回购指向不同的回购[重复]
【发布时间】:2013-07-25 11:56:57
【问题描述】:

我有一个存储库 (A),我一直在其中构建代码,我在不同的存储库 (B) 中也有相同的旧代码版本,将存储库 (A) 带到存储库 (B) 的最佳方式是什么。最终回购(A)应该消失。基本上我想指向B。

在这些选项中,哪一个是好的做法:

  1. 编辑 .git/config 文件 URL - 使用 URL (B) 代替 URL (A) 并推送 所有的变化

  2. 发出拉取请求并引入更改(不确定从 repo 到 repo 可以做到 (A) 不是 (B) 的一个分支。

也许有比以上两种更好的方法。

【问题讨论】:

  • 这个问题不清楚。 B 如何比 A 拥有“旧代码版本”? A 是 B 的克隆,而您有一段时间没有更新 B? A 和 B 是否共享一些相同的历史记录(即 sha ID)?还是 A 和 B 有相同的文件,但 A 的历史与 B 的完全不同(即 A 的 sha ID 都没有与 B 共享)?

标签: git git-config


【解决方案1】:

您需要git fetch /path/to/other/local_or_not/repo,然后像往常一样合并更改,使用:

git merge FETCH_HEAD

Git fetch man page says: "从一个或多个其他存储库中获取命名的头像或标签,以及完成它们所需的对象。"

所以,总体来说应该是这样的:

cd /path/to/B
git fetch /path/to/A
git merge FETCH_HEAD
# fix merge conflicts and you should be done!

乐: 请注意,这种方法(或多或少)等同于(或多或少)github 上的拉取请求(您的第二个想法),而实际上不需要 github(或您正在使用的任何 git 托管服务)。

【讨论】:

    【解决方案2】:

    方法有很多,但最“正确”的只是为repo B添加一个新的遥控器,然后推送到它

    $ git remote add repo-b http://my-address-for-repo-b
    
    $ git push repo-b master
    

    【讨论】:

    • 在我看来,这远非正确的方法,因为您必须在回购 B 中 git pull 并且由于 pull 是 fetch&merge 我认为在回购 B 中直接进行简单的 fetch&merge 是最干净的方式,请参阅我的回答以了解我的意思的详细信息。
    • @Paul 我认为我们中的一个人误解了这个问题。我认为他只是在 repo B 上有更新的提交,他想推送到 repo B,这(大概)是同一存储库的旧副本。此处无需获取/合并。
    • @meagar 在你的回答中 repo-b 应该是 origin $git remote add origin http://my-address-for-repo-b 那么推送命令应该如何改变来反映这一点。
    • 好吧,当他拉入 repo B 时,无论如何都会完成 fetch&merge(如果他仍然在代码上工作,他将执行拉动),因为这就是拉动,一个提取和一个合并。拉力对这两个人来说是瓷器,而你的方式只是用右手在头部左侧刮擦。不要误会我的意思,它解决了问题,但在我看来是一种解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2010-10-12
    • 2018-06-10
    相关资源
    最近更新 更多