簡體   English   中英

如何讓git repo記住所有遙控器?

[英]How to make git repo remember all remotes?

我有一個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)

有沒有辦法讓這個額外的遠程持久化克隆? 假設我刪除了本地存儲庫並執行以下操作:

git clone git@github.com:skela/awesomeproject.git

現在我重新檢查我的遙控器:

$ git remote -v
origin git@github.com:skela/awesomeproject.git (fetch)
origin git@github.com:skela/awesomeproject.git (push)

我的上游遙控器消失了!

如何確保我的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

換句話說,在我的倉庫中的分支“父親”跟蹤稱為上游主分支的遠程。

一旦我設置它,它一切都很好,但是一旦我再次克隆了回購,“父”分支指向原點而不是上游。

那是不可能的。 Git只克隆了repo的內容,而不是它的設置。 如果你想將遙控器硬連接到你的倉庫(這是否是一個好主意), repo-setup.sh在你的repo-setup.sh根目錄中創建一個腳本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

克隆存儲庫后運行此文件。

使用與遙控器相關的.git / config內容填充文件.gitremotes。 將.gitremotes添加到存儲庫。 克隆后使用.gitremotes附加.git / config。 注意:如果您要共享的遙控器(在.gitremotes中)與“git clone”自動創建的遙控器名稱沖突('orgin'),則可能需要進行一些手動編輯。

要輕松完成此任務,您可以定義一個bash函數:

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

[以上並不是那么復雜; 但說明了要點和工作]

這是GoZoner解決方案的略微修改版本。

您需要將repo的.git/config所有遙控器的信息捕獲到一個可以存儲在git存儲庫之外的文件中。 每次添加新遙控器時,您還需要注意更新此文件。 事實上,這可以添加到您的git倉庫中,以便下一個克隆或拉動引入此文件。

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

因此,您可以.git/config添加到repo的.git/config以包含包含遠程信息的外部配置文件:

[include]
    path            = /dir1/dir2/repo-remotes.gitinfo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM