[解決済み] 複数の git リポジトリをどのように整理し、すべてのリポジトリが一緒にバックアップされるようにするか?
質問
SVN では、私はサーバー上に単一の大きなリポジトリを持っており、いくつかのマシンでチェックアウトしていました。これはかなり良いバックアップ システムであり、どのマシンでも簡単に作業することができました。私は特定のプロジェクトをチェックアウトし、コミットして、それが「マスター」プロジェクトを更新するか、または全体をチェックアウトすることができました。
現在、私はさまざまなプロジェクトのためにたくさんの git リポジトリを持っており、そのうちのいくつかは github にあります。また、私が言及した SVN リポジトリもあり、git-svn コマンドによってインポートされます...
基本的に、私はすべてのコード(プロジェクトだけでなく、ランダムなスニペットやスクリプト、私の履歴書、私が書いた記事、私が作ったWebサイトなど)を、リモートマシンやバックアップ用のメモリースティック/ハードドライブに簡単にクローンできる1つの大きなリポジトリに持つのが好きです。
問題は、それがプライベートなリポジトリであり、git が特定のフォルダーのチェックアウトを許可しないことです (別のプロジェクトとして github にプッシュすることはできますが、変更はマスター レポとサブレポの両方に表示されます)。
I は を使うこともできますが、それは私が望むようには動作しません (サブモジュールは他のリポジトリへのポインタであり、実際のコードを含んでいないので、バックアップには役に立ちません)。
現在、私はgit-reposのフォルダ(例えば、~/code_projects/proj1/.git/ ~/code_projects/proj2/.git/ )を持っていて、proj1への変更の後、私は次のようにします。
git push github
そして、ファイルを ~/Documents/code/python/projects/proj1/ にコピーして、(個々のリポジトリにある多数のコミットの代わりに)1つのコミットを行います。それから
git push backupdrive1
,
git push mymemorystick
など
そこで、質問です。個人的なコードやプロジェクトをどのようにgitリポジトリで管理し、同期やバックアップをとっているのでしょうか?
どのように解決するのですか?
私なら <強い 強く に無関係なデータを置くことはお勧めしません。 に入れることをお勧めします。 新しいリポジトリを作成するオーバーヘッドは非常に低く、これは非常に重要です。 であり、それは 機能 これは 異なる系統を完全に分離することが可能です。
その考えと戦うことは、不必要に絡まった歴史を終わらせることを意味します。 管理はより難しくなり、さらに重要なのは さらに重要なのは、その結果、考古学の道具が希薄になり、使い勝手が悪くなることです。 を使わなくなります。 また、あなたがおっしゃるように、Gitはquot;クローニングの単位を想定しています。 クローンする単位がリポジトリであることを前提にしていますし、事実上そうしなければなりません。 その分散された性質のために、事実上そうしなければなりません。
一つの解決策は、すべてのプロジェクト/パッケージ/その他を、それ自身の をむき出しにすることです。 リポジトリ (すなわち、作業ツリーなし) として、祝福された階層の下に置くことです。 のようにすることです。
/repos/a.git
/repos/b.git
/repos/c.git
いくつかの慣例が確立されると、管理操作 (バックアップ、梱包、ウェブ公開) を 管理操作(バックアップ、梱包、Web公開)を適用することができるようになります。 とは全く異なる役割を果たします。 モノリシックなSVNリポジトリと全く同じ役割を果たします。 これらのリポジトリでの作業も このリポジトリでの作業も、SVN のワークフローと多少似ていますが、1 つの できる ローカルコミットやブランチを使用することができます。
svn checkout --> git clone
svn update --> git pull
svn commit --> git push
各ワーキングクローンに複数のリモートを置くことができます。 複数の関係者間で同期を取りやすくするためです。
$ cd ~/dev
$ git clone /repos/foo.git # or the one from github, ...
$ cd foo
$ git remote add github ...
$ git remote add memorystick ...
そして、それぞれのソースからフェッチ/プルを行い、ローカルで作業とコミットを行い、そして、プッシュ("backup")することができます。 ローカルで作業とコミットを行い、準備ができたらそれぞれのリモートへプッシュ ("backup") します。 をプッシュします。 と同じ コミット と履歴を各リモートにプッシュしていることに注目してください!)
$ for remote in origin github memorystick; do git push $remote; done
最も簡単な方法は、既存のワーキングリポジトリを
~/dev/foo
をそのようなベアリポジトリにするのは、おそらく
$ cd ~/dev
$ git clone --bare foo /repos/foo.git
$ mv foo foo.old
$ git clone /repos/foo.git
とほぼ等価であり
svn import
--と同じですが
既存の、"local" の履歴を捨てません。
注意してください。 サブモジュール は共有の に関連する であるため、この問題に対する適切なツールとは考えられません。 そのため、あなたが解決しようとしている問題には適切なツールではないと思います。
関連
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み] Git ですべてのリモートブランチをクローンする方法
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] Gitで変更された複数のファイルのうち、1つのファイルだけを隠す?
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Git を使ってタグをリモートリポジトリにプッシュするには?
-
[解決済み] Git フェッチ リモートブランチ
-
[解決済み] 2 つの Git リポジトリをマージする方法は?
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
git commit コマンドで追跡した新規ファイルをコミットすると、プロンプト *** Please tell me who you are が表示されます。
-
GitのPlease enter a commit messageで、このマージが必要な理由を説明してください。
-
git reset --hardとgit reset --softの違いについて
-
[Gitラーニングノート】Gitのコンフリクト:マージする前に変更をコミットするかstashする。
-
gitの利用(ssh鍵の作成とgithubの利用)。
-
git push please tell me who you are or git fatal: empty ident name (for <>) not llowed.
-
[解決済み] 単一のgitコミットに対して設定されたユーザーを上書きする
-
[解決済み] gitでコミット間を前進・後退させる方法は?
-
[解決済み] Git のリモート HEAD を master 以外に指定するように変更する
-
[解決済み] Git タグリスト、コミット sha1 ハッシュの表示