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

问题描述 投票:14回答:3

我有一个git仓库,它是另一个仓库的分支。通常,我通常会添加一个称为上游的远程站点,这是我从中派生的原始存储库。

$ git remote -v
origin [email protected]:skela/awesomeproject.git (fetch)
origin [email protected]:skela/awesomeproject.git (push)
upstream git://github.com/bob/awesomeproject.git (fetch)
upstream git://github.com/bob/awesomeproject.git (push)

有没有办法让这个额外的远程服务器在多个克隆之间持续存在?说我删除本地存储库并执行:

git clone [email protected]:skela/awesomeproject.git

现在我重新检查遥控器:

$ git remote -v
origin [email protected]:skela/awesomeproject.git (fetch)
origin [email protected]:skela/awesomeproject.git (push)

我的上游遥控器已消失!

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

编辑:只是添加我要这样做的主要原因,是为了使一些答案沿着可接受的路径成形;)

目标是在我的存储库中有一个分支来跟踪上游的主服务器。

[remote "upstream"]
    url = git://github.com/bob/awesomeproject.git
    fetch = +refs/heads/*:refs/remotes/upstream/*
[branch "father"]
    remote = upstream
    merge = refs/heads/master

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

一旦设置好,一切都很好,但是一旦我再次克隆仓库,“父亲”分支就指向源而不是上游。

git github git-clone git-remote
3个回答
12
投票

这是不可能的。 Git仅克隆存储库的内容,而不克隆其设置。如果您想将远程设备硬连接到您的存储库中(这会质疑这是否是个好主意),请在您的存储库根目录中创建一个脚本repo-setup.sh,该脚本执行以下操作:

git remote rm origin
git remote rm upstream
git remote add origin [email protected]:skela/awesomeproject.git
git remote add upstream git://github.com/bob/awesomeproject.git

克隆存储库后,请运行此文件。


3
投票

创建文件.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
}

[以上内容并不那么复杂;但说明了要点和工作原理]


1
投票

这是GoZoner解决方案的稍作修改的版本。

您需要从存储库的.git/config中捕获有关所有远程设备的信息,并将其存储在git存储库之外的文件中。每次添加新的遥控器时,您还需要注意更新此文件。实际上,这可以添加到您的git repo中,以便下一个克隆或请求引入此文件。

[从git 1.7.10+开始,git支持包括外部配置文件。

因此您可以将以下行添加到存储库的.git/config中,以包含包含远程信息的外部配置文件:

[include]
    path            = /dir1/dir2/repo-remotes.gitinfo
© www.soinside.com 2019 - 2024. All rights reserved.