18

別のリポジトリのフォークである git リポジトリがあります。原則として、私は通常、フォークした元のレポである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 リポジトリがこれら 2 つのリモート エイリアスを常に保持するようにするにはどうすればよいですか?

編集:一部の回答を許容できるパスに沿って形作るために、これを実行したい主な理由を追加するだけです;)

目標は、アップストリームのマスターを追跡するレポにブランチを作成することです。

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

言い換えれば、私のレポにあるブランチ「父」は、アップストリームのマスターブランチと呼ばれるリモートを追跡します。

一度設定するとすべてうまく機能しますが、レポを再度複製するとすぐに、「父」ブランチは上流ではなく起点を指します。

4

3 に答える 3

14

それは不可能です。Git はリポジトリのコンテンツのみを複製し、その設定は複製しません。リモートをレポジトリに固定接続したい場合 (それが良い考えかどうか疑問に思うでしょう)、次の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

次に、リポジトリのクローンを作成した後、このファイルを実行します。

于 2013-03-08T04:24:25.097 に答える
5

リモートに関連する .git/config のコンテンツを入力するファイル .gitremotes を作成します。リポジトリに .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
}

[上記はそれほど洗練されたものではありません。しかし、ポイントと作品を示しています]

于 2013-03-08T04:00:54.607 に答える
1

これは、GoZoner のソリューションを少し変更したバージョンです。

.git/configリポジトリのすべてのリモートに関する情報を、git リポジトリの外に保存できるファイルにキャプチャする必要があります。また、新しいリモートを追加するたびに、このファイルを更新する必要があります。これは実際に git リポジトリに追加できるため、次のクローンまたはプルでこのファイルが取り込まれます。

からgit 1.7.10+、git は外部構成ファイルのインクルードをサポートします。

したがって、リポジトリに次の行を追加して.git/config、リモート情報を含む外部構成ファイルを含めることができます。

[include]
    path            = /dir1/dir2/repo-remotes.gitinfo
于 2013-03-08T05:31:26.410 に答える