如何让git repo记住所有遥控器?

Ske*_*ela 14 git github git-clone git-remote

我有一个git repo,它是另一个repo的分支.作为一项规则,我通常会添加一个名为upstream的远程,这是我分叉的原始回购.

$ git remote -v
origin git@github.com:skela/awesomeproject.git (fetch)
origin git@github.com:skela/awesomeproject.git (push)
upstream git://github.com/bob/awesomeproject.git (fetch)
upstream git://github.com/bob/awesomeproject.git (push)
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个额外的远程持久化克隆?假设我删除了本地存储库并执行以下操作:

git clone git@github.com:skela/awesomeproject.git
Run Code Online (Sandbox Code Playgroud)

现在我重新检查我的遥控器:

$ git remote -v
origin git@github.com:skela/awesomeproject.git (fetch)
origin git@github.com:skela/awesomeproject.git (push)
Run Code Online (Sandbox Code Playgroud)

我的上游遥控器消失了!

如何确保我的git repo始终保留这两个远程别名?

编辑:只是添加我想要这样做的主要原因,以便在可接受的路径上塑造一些答案;)

目标是在我的仓库中设立一个跟踪上游主人的分支.

[remote "upstream"]
    url = git://github.com/bob/awesomeproject.git
    fetch = +refs/heads/*:refs/remotes/upstream/*
[branch "father"]
    remote = upstream
    merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud)

换句话说,在我的仓库中的分支"父亲"跟踪称为上游主分支的远程.

一旦我设置它,它一切都很好,但是一旦我再次克隆了回购,"父"分支指向原点而不是上游.

Chr*_*ial 12

那是不可能的.Git只克隆了repo的内容,而不是它的设置.如果你想将遥控器硬连接到你的仓库(这是否是一个好主意),请repo-setup.sh在你的仓库根目录中创建一个类似这样的脚本:

git remote rm origin
git remote rm upstream
git remote add origin git@github.com:skela/awesomeproject.git
git remote add upstream git://github.com/bob/awesomeproject.git
Run Code Online (Sandbox Code Playgroud)

克隆存储库后运行此文件.


GoZ*_*ner 5

创建一个文件 .gitremotes,您将使用与遥控器相关的 .git/config 的内容填充该文件。将 .gitremotes 添加到存储库。在克隆后附加 .git/config 和 .gitremotes。注意:如果您要共享的遥控器(在 .gitremotes 中)与“git clone”自动创建的遥控器(“orgin”)有名称冲突,则可能需要进行一些手动编辑。

为了轻松实现这一点,您可以定义一个 bash 函数:

function git-clone-r ()
{
  src=$1
  tgt=$2
  git clone $src $tgt
  cat ${tgt}/.gitremotes >> ${tgt}/.git/config
}
Run Code Online (Sandbox Code Playgroud)

[以上并不是那么复杂;但说明了这一点并有效]

  • 我使用这个脚本 https://github.com/juanpabloaj/git-remote-init 来保存和恢复带有 .gitremotes 文件的远程仓库 (2认同)