0

gitリポジトリ(クローン可能およびプッシュ可能)自体を別のリモートリポジトリのクローンにすることは可能ですか?

シナリオ:

当社のgitホスティング用にgitoriousのインストールがあります。更新を維持したいのですが、いくつかの非常にプライベートな機能(主にスクリプトのデプロイ)を追加するため、プッシュ可能なプロジェクトが必要です。必要なワークフローは次のとおりです。

  • プッシュ可能なgitリポジトリとしてmygitorousを作成する
  • gitorious-officialをmygitoriousにクローンします(サブモジュールとしてではなく、refとして)
  • ユーザーは、mygitoriousのクローンを作成してプッシュできるようになりました
  • 次に、mygitoriousとgitorious-officialをマージして、アップストリームから更新できます。
  • デプロイしたクローンを更新できます
  • ユーザーは、マージされたバージョンでクローンを更新できます

PS。これらのデプロイスクリプトは非常に機密性が高いため、単純に公開クローンを作成して使用することはできません。

4

1 に答える 1

5

もちろん。のような分散バージョン管理システムの背後にある全体的な考え方gitは、「特別な」リポジトリはないということです。任意のリポジトリーは、ゼロ、1つ、または複数の他のリポジトリーのクローンまたは宛先にすることができます。

たとえば、リポジトリがあると仮定するとrepo1.git、次のことができます。

$ git clone --bare repo1.git repo2.git
$ git clone repo2.git repo3
$ cd repo3
$ ...make some changes and commit...
$ git push
$ cd ../repo2.git
$ git push

それに沿って進むと、私がrepo3-> repo2を押してから、repo2->repo1を押したことがわかります。

あなたのコメントへの返信:

git checkoutベアリポジトリで実行することはできません。それがfatal: This operation must be run in a work tree意味することです。リポジトリをgit clone作成すると、次の2つが得られます。

  • .gitディレクトリに含まれるリポジトリのコピー、および
  • 「作業コピー」または「作業ツリー」。これは、リポジトリ内のファイルのチェックアウトされたコピーを含むディレクトリです。多くのコマンド(checkoutpull)は、作業コピーを操作しているときにのみ意味があります。

ただし、ベアでないリポジトリ(つまり、作業ツリーが関連付けられているリポジトリ)にプッシュするのは難しいことに注意してください。gitは明示的な設定なしでエラーをスローします。次の線に沿って何かが表示されます。

To /home/lars/tmp/so/repo
 ! [remote rejected] foo -> foo (branch is currently checked out)
error: failed to push some refs to '/home/lars/tmp/so/repo'

これは、他の人がリポジトリにプッシュしている場合、作業ツリーの下のリポジトリ内で変更が発生するのは驚くべきことだからです。あなたはこの答えでもっと読むことができます。

于 2012-05-11T15:43:24.083 に答える