異なるホスト上のgitリポジトリを同期させる


34

私は小さなプロジェクトを始めることを考えており、gitでバージョン管理をしたいと思っています。

Bitbucketは無料プランで私にとって良い選択肢のようです。ウェブインターフェース、Mac OSクライアントなどの優れたツールがあるため、gitを操作するためのメインツールとして使用したいと思います。しかし、サードパーティのサービスを使用することによって引き起こされる可能性のある偶発的な損害からより高い保護を得るために、リポジトリの2番目のバックアップコピーとしてNASにgitをインストールしたいです。

ここで私の質問は、2つの異なるホストでリポジトリを作成し、それらを同期させることが可能かどうかです。たとえば、週に1回、Bitbucketのリポジトリと一致するようにNASのリポジトリを更新するとします。その後、Bitbucketで何かが発生した場合でも、ローカルNASストレージでの開発の完全な履歴を備えた完全なリポジトリを保持します。

また、完全な履歴を持つ既存のリポジトリを別のgit-serviceにインポートする方法はありますか?


ミラーリングが必要だと思います。この記事は、私が必要とするものを正確に説明しているようです。そして、この1としても。

完全な履歴で完全なコピーを作成し、両方のホストのリポジトリに新しいバージョンを自動的にコミットすることさえできると信じています。

私は正しいですか?


私はxpdevを使用していますが、あなたの2つのシステムの状況では、あなたの場合のgitのベネフィットは何でしょうか?すべての最終ビルドから念のため、USBバックアップを作成します。ただし、基本的にはバージョン管理はxpdevで処理されるため、実際の要件ではありません。ところで、もしあなたがフールプルーフNASS Raid1を所有しているなら、あなた自身のバージョン管理システムの実行を検討するかもしれません。いくつかのfreeonesもあります
user613326

しかし、2か所で完全なバージョン管理を利用できるようにしたいと考えています。サードパーティのホスティングが
停止した

つまり、快適さのためにBitbucketを、99.9%の安全性のためにNASでgitを使用することになります。
BartoNaz

xp-devに関しては、そのような会社が死ぬ可能性は低いため、コードホスティングプラン、価格などを変更したり、別の会社と合併したりする可能性があります。しかし、彼らにとってはお金の牛乳です。また、貴重なデータもバックアップします。そのビジネスはその場にとどまります。私は3人の開発者と一緒に使用し、コードは5つの異なるマシンに存在し、常にローカルのソースコピーがxp devで同期されます。少数のプロジェクトしかない場合、XP devは無料です。
user613326

1
もちろん、ありそうもない。しかし、それでも、100%確信することは決してできません
...-BartoNaz

回答:


19

はい、それはまさにgitなどのDVCSの美しさです。bitbucketまたはgithubのリポジトリと同じ状態の異なるリポジトリをいくつでも使用できます。

ローカルコピー(コンピューター上のリポジトリ)でさえ、通常はリモートリポジトリの完全なクローンです。

複数のリポジトリの同期を保つために必要なことは、1つ(通常はオリジンまたはアップストリームと呼ばれる)をプルし、バックアップコピーにプッシュすることだけです。


11
残念ながら、すべてがそれほど光沢があるわけではありません。災害に近いKDEの注意事項を参照してください。つまり、バックアップによって、バックアップされたサーバーで削除されたもの(ブランチ、リポジトリなど)が削除されないことを確認しください。
ジャン・ヒューデック

私はそれを正しく理解しているかどうかはまだわかりません。私の知る限り、プッシュとプルは特定のバージョンで機能します。しかし、作業中のマシンに最新バージョンのコードがあるとしましょう。リモートホスト(Bitbucket、Github、またはその他)にgitリポジトリがあり、作業マシン上にある最新バージョン(コミットされている場合)までのコード開発の完全な履歴があります。また、空のNASにリポジトリがあります。コードの完全な履歴をリモートホストからNASにインポートして、2つの場所に2つの同一のリポジトリがあり、その方法を教えてください。
BartoNaz

2
リモートリポジトリのクローンを作成し、定期的にすべての更新(すべてのブランチ)をそこにプルします。gitクローンには履歴が含まれています。これは、最新バージョンのみが含まれるsvnチェックアウトとは異なります。
ウィルバート

11

問題に対するテスト済みのソリューションは次のとおりです。自動同期2リモートGitリポジトリ

2つのリモートGitリポジトリを同期するための簡単なスクリプト

同期する簡単なスクリプトをウェブで検索しました。2つのリモートリポジトリがありますが、多くの人が探しているようでさえ、そのようなスクリプトは見つかりませんでした!そこで、2つの簡単なテストリポジトリを作成し、そのようなスクリプトのテストと構築を開始しました。

そのようなスクリプトは何をすべきでしょうか?

まあ、一般的に、それを行うための手順は簡単です:1.最初のリポジトリをクローンしますリモートリポジトリ。

残っている問題は-上記のすべてのgitコマンドの正しいスイッチは何ですか?

だからここにある...

2repos-sync.sh gispスクリプト

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $ORIGIN_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git push origin --all
git push origin --tags
git push repo1 --all
git push repo1 --tags

-このスクリプトは、リポジトリコンテンツ間の競合のケースを解決していません!


回答の中で、最初に行うことは、$ REPO_NAMEを使用して既存のローカルディレクトリを削除することです。これは重要と思われ、ソリューションをコピーするだけの人にとってはデータの損失を防ぐことができます。
ウィルバート

これに合わせて、LibGit2はこの種のことに役立ちます。
ラバーダック

0

プライベートGitLabを使用してすべてのリポジトリを保存しているため、日々の開発を行っている間、プッシュ元とプル元は1つしかありません。

ただし、オープンソースプロジェクトの場合、GitHubははるかに活気のあるコミュニティです。そのため、プロジェクトへのコミュニティの貢献を受け入れたい場合、web GitLabのWebフックシステムを使用して実行中のサーバーにpingを実行し、GitHubの公開リポジトリを更新します。

これにより、GitHubを、誰かが貢献したときにプルできる別のリモートとして扱うことができます-そして、私はローカルにマージします-そして、すべてのプライマリおよびパブリックリポジトリが変更を配布する方法へのフローがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.