web-dev-qa-db-ja.com

Gitlabリポジトリミラーリング

別の場所でホストされているリポジトリを自動的に同期(ミラー)するために gitlab セットアップを使用することは可能ですか?

現時点では、これを行う最も簡単な方法は、2つのリポジトリ(gitlabと他のリポジトリ)に手動でプッシュすることですが、これには時間がかかり、エラーが発生しやすくなります。

最大の問題は、ミラーが再同期できることです。2人のユーザーが同時に2つの異なるリポジトリに変更をプッシュします。この問題を防ぐために私が思いつく最善の方法は、ユーザーがいずれかのリポジトリにのみプッシュできるようにすることです。

52
goncalopp

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

  • ミラーリポジトリ設定でリモートプッシュURLを入力する機能を追加します
  • 実装コードをリモートリポジトリへのプッシュに追加する
  • 新しいバックグラウンドワーカーを追加
  • 最新の更新日と同期エラーが存在する場合は表示します。
  • 1時間ごとにリモートミラーを同期します。

最近のRemote Mirror Repositoryissue 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を削除します
  • プレス保存
  • 次に、リモートミラーを追加します
19
VonC

独自のGitLabをホストしていない場合、回避策なしでGitLab.comがこの機能を直接導入していることを知っておく価値があります。

  1. プロジェクト内から歯車アイコンを使用してミラーリポジトリを選択します
  2. 下にスクロールしてリモートリポジトリにプッシュ
  3. チェックマークリモートミラーリポジトリ:このリポジトリからリモートミラーのブランチ、タグ、およびコミットを1時間ごとに自動的に更新します。
  4. 更新するリポジトリを入力します。 GitHubの場合、少なくとも次のようにURLにユーザー名とパスワードを含めることができます:https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git

リモートリポジトリからプルする場合、ここで設定したリモートリポジトリにプッシュすることに注意してください。試したことはありませんが、同じリポジトリにプッシュしたりプルしたりできるはずです。

8
mlncn

GitLabおよびGitHubでのリポジトリの構成ミラーリングの概要


  1. GitHub:設定>開発者設定>個人アクセストークン
    • 有効にする必要があります:public_repo
  2. GitLab:GitLabプロジェクト>設定>リポジトリ>リポジトリのミラーリング


押す

  • GitリポジトリURLhttps://[email protected]/username/repo.git
  • ミラーの方向Push
  • 認証方法Password
    • パスワードyour_token


引く

  • GitリポジトリURLhttps://github.com/username/repo.git
  • ミラーの方向Pull
  • 認証方法leave_empty


公式GitLabドキュメント

4
Breith

また、APIを使用してGitLab 6のリポジトリをミラーリングするプロジェクトを作成しました(APIは主にプロジェクトの作成時にのみ使用されます)。

https://github.com/sag47/gitlab-mirrors

4
Sam Gleske

今日の最良の選択肢は、GitLab CIを使用することです。本質的には、webhook用の既に実装されたサーバーであり、自動的にクローンを作成し、任意のシェルコマンドを実行できます。その後、プッシュするだけです。

services は、誰かがそれらを実装する場合の最良のオプションです。それらはソースツリーに存在し、単一のプッシュを行い、追加のデプロイメントオーバーヘッドを必要としません。

鍵となる実装の難しさは、Pushクレデンシャルを安全に保存する方法です。GitHubの最良のオプションは、何らかの方法でキーを取得し(サービスを介したUIでのOauthが最適)、そのプレーンテキストを保存することです。

追加されたばかりの別のオプションは、 カスタムフック です。

フックを使用して、コミット後に実行されるスクリプトをカスタマイズできます。これにより、新しい変更を別のリポジトリに送信できます。次のページでフックの詳細を確認してください。 http://git-scm.com/book/en/Customizing-Git-Git-Hooks

GitLab Enterprise Editionは、バージョン8.2からリポジトリミラーリングをサポートするようになりました。これを構成する方法に関する情報は、 リポジトリミラーリングのヘルプトピック にあります。

0
Scott Willeke

最適なオプションは、受信後フックを使用しないことですが、Rubyが好きな場合は Capistrano を使用し、 Shipit Javascript(Grunt)を好む場合。

0
KouiK