別の場所でホストされているリポジトリを自動的に同期(ミラー)するために gitlab セットアップを使用することは可能ですか?
現時点では、これを行う最も簡単な方法は、2つのリポジトリ(gitlabと他のリポジトリ)に手動でプッシュすることですが、これには時間がかかり、エラーが発生しやすくなります。
最大の問題は、ミラーが再同期できることです。2人のユーザーが同時に2つの異なるリポジトリに変更をプッシュします。この問題を防ぐために私が思いつく最善の方法は、ユーザーがいずれかのリポジトリにのみプッシュできるようにすることです。
2016年12月更新:ミラーリングはGitLAb EE 8.2+でサポートされています:「 リポジトリミラーリング 」を参照してください。
Xiaodong Qi によるコメント:
この答えは、コマンドラインを使用せずに単純化できます(Gitlabリポジトリ管理インターフェイスで設定するだけです)
元の回答(2013年1月)
リモートミラーリポジトリが bareリポジトリ の場合、受信後フックをgitlab管理のリポジトリに追加し、リモートにプッシュできますその中のレポ。
#!/bin/bash
git Push --mirror [email protected]:/path/to/repo.git
Gitoliteとして(Gitlabで使用) メンション :
いくつかの特定のリポジトリのみにフックをインストールする場合は、サーバーで直接実行します。
次のようになります:
~git/repositories/yourRepo.git/hook/post-receive
警告(2014年10月更新)
Ciro Santilli 指摘 コメント内 :
今日(2014年第4四半期)これは失敗しますGitLabは自動的にgithub.com/gitlabhq/gitlab-Shell/tree/...を管理するすべてのリポジトリにシンボリックリンクするためです。
したがって、この変更を行うと、変更するすべてのリポジトリがプッシュを試行します。
アップグレードの際に起こりうる競合は言うまでもありませんgitlab-Shell
、および現在のスクリプトはRubyスクリプトであり、bashではありません(削除しないでください!)。これを修正するには、現在のディレクトリ名を読み取り、そのディレクトリ名とリモートの間の全単射を確認しますが、これらのものから遠く離れた場所にいることをお勧めします
feeadback "GitLab Repoへのプッシュ後のリモートミラーリポジトリへの自動プッシュ" を参照(および投票)してください。
2016年7月更新:GitLab EE(Enterprise Edition)にこの種の機能が追加されました: MR 249
最近のRemote Mirror Repository
( issue 1794 )扱いにくい場合があります:
現在、Lossless GmbH( https://www.npmjs.com/~lossless )のオープンソースnpmモジュールの主な開発をGitHub.comからGitLab.comに移行しようとしています。
GitHubからすべてのリポジトリをインポートしていますが、
Mirror Repository
およびオンRemote Mirror Repository
元のGitHub URLでは、次のエラーが表示されます。
Remote mirrors url is already in use
これが失敗するリポジトリの1つを次に示します。 https://gitlab.com/pushrocks/npmts 2か月前に編集
結局のところ、複数の手順が必要です。
- ミラーリポジトリを無効にする
- プレス保存
- uRlを削除します
- プレス保存
- 次に、リモートミラーを追加します
独自のGitLabをホストしていない場合、回避策なしでGitLab.comがこの機能を直接導入していることを知っておく価値があります。
https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git
リモートリポジトリからプルする場合、ここで設定したリモートリポジトリにプッシュすることに注意してください。試したことはありませんが、同じリポジトリにプッシュしたりプルしたりできるはずです。
https://[email protected]/username/repo.git
Push
Password
your_token
https://github.com/username/repo.git
Pull
leave_empty
また、APIを使用してGitLab 6のリポジトリをミラーリングするプロジェクトを作成しました(APIは主にプロジェクトの作成時にのみ使用されます)。
今日の最良の選択肢は、GitLab CIを使用することです。本質的には、webhook用の既に実装されたサーバーであり、自動的にクローンを作成し、任意のシェルコマンドを実行できます。その後、プッシュするだけです。
services は、誰かがそれらを実装する場合の最良のオプションです。それらはソースツリーに存在し、単一のプッシュを行い、追加のデプロイメントオーバーヘッドを必要としません。
鍵となる実装の難しさは、Pushクレデンシャルを安全に保存する方法です。GitHubの最良のオプションは、何らかの方法でキーを取得し(サービスを介したUIでのOauthが最適)、そのプレーンテキストを保存することです。
追加されたばかりの別のオプションは、 カスタムフック です。
フックを使用して、コミット後に実行されるスクリプトをカスタマイズできます。これにより、新しい変更を別のリポジトリに送信できます。次のページでフックの詳細を確認してください。 http://git-scm.com/book/en/Customizing-Git-Git-Hooks
GitLab Enterprise Editionは、バージョン8.2からリポジトリミラーリングをサポートするようになりました。これを構成する方法に関する情報は、 リポジトリミラーリングのヘルプトピック にあります。
最適なオプションは、受信後フックを使用しないことですが、Rubyが好きな場合は Capistrano を使用し、 Shipit Javascript(Grunt)を好む場合。