【TortoiseGit】複数のリポジトリを統合する

公開日: : Git, サイト制作, ソフト

スポンサーリンク

やりたいこと

最近WindowsにTortoiseGitを導入してリポジトリを作ったり、履歴をプッシュ・プルしたりと超基本的なことができるようになりました。

初めは適当にたくさんリポジトリを作っていたのですが、よくよく考えてみるとリポジトリとしたディレクトリの切り方が細かすぎて悪かったのではないかと思うようになったため、今まで作ったリポジトリをまとめて一つに統合する…ということをやりました。

リポジトリrepo1、repo2に対して下記2点について取り組みます。
下記共通処理
repo1とrepo2を合体させる
repo1の下にrepo2を移す

コンソールでの操作

下記サイトを引用させていただきました。

repo1とrepo2を合体させる

cd ~/repo1
git remote add repo2 ~/repo2
git fetch repo2

git merge repo2/master

repo1の下にrepo2を移す

cd ~/repo1
git remote add repo2 ~/repo2
git fetch repo2

# サブディレクトリの内容に repo2 の内容をマージする
# (repo2 と内容が似ているサブディレクトリを自動で判別)
git merge -s subtree repo2/master

# ↑でうまくいかないときにはパスを指定する↓
git merge -X subtree=subdir repo2/master

# そもそも ~/repo1/subdir が存在しないときには↓
git read-tree –prefix=subdir/ repo2/master
git checkout — .

詳細は参考リンク先をご覧ください。

とりあえず、これをコマンドなしのGUI画面からやりたいというのが今回の課題です。(正直無理してGUIでやる必要はないです)

コマンドで操作したことないど素人なので正直上記で何をやっているのかよくわかってませんでした。なので一つずつ理解しながら進めます。

基礎知識

git remote add [name] [url]

リモートリポジトリ先を登録します。[name]にはリポジトリの名前、[url]にはリモートリポジトリのURL(もしくはディレクトリ)を入れます。

git_remoteadd
↑tortoiseGitだとこんなかんじで登録できます。(右クリック→設定)

git fetch [name]

リモートリポジトリの最新の履歴の取得だけを行うことができます。[name]はリモートリポジトリの名前です。

git_fetch

TortoiseGitでは右クリック→「TortoiseGit」→「フェッチ」ですが、上記のリモートリポジトリの登録の時点でも「フェッチするか?」といったダイアログは出ます。

このfetchですが、実体は「pull = fetch + merge」で、動作としては、fetchによりリポジトリからダウンロードしてきてmergeにより統合させるといった感じのようです(ちなみにpushがアップロード)。それゆえ、pullは必要ないという意見もあるようです(下記リンク参照)。

リポジトリ統合のイメージ

fetchやmergeの動作を利用します。fetchで指定のリモートリポジトリからダウンロードしてきたデータをローカルでmergeにてうまいこと統合させる…といったストーリーです。

2つのリポジトリをまとめる

ここからやっと本題です。

共通処理

repo1にrepo2を持ってくることを考えます。まず、ローカルリポジトリrepo1にリモートリポジトリのrepo2のありかを教えます。先ほどの説明のようにrepo1のどこかしらで右クリックして「設定」画面を開いてrepo2を指定します。

git_target_repo
↑設定はサンプルです

適当にどこかクリックするとフェッチしますかといった文言が出てくるので「はい」としてフェッチ(ダウンロード)します。

git_repo_fetch_info

リモート先の指定が出るので「repo2」を指定して「OK」を押してリモート先からダウンロード開始します。

git_repo_fetch_dialog_repo2

repo1とrepo2を合体させる

ローカルリポジトリ「repo1」のどこかで右クリック→「TortoiseGit」→「マージ」でマージします。

git_merge

ダイアログが出てくるので「repo2」を選択してOKをクリックします。

git_repo_ex1_merge

これでrepo1のローカルリポジトリにrepo2がマージされました。

repo1の下にrepo2を移す

まずはrepo1の中にrepo2フォルダを作成します(名前は変更しても構わない)。そして、このフォルダを認識させるために中になんでも良いのでファイルを作成&追加してコミットします。この手順を踏まないとうまくいきません。このファイルは後で削除してください。
 ちなみに元々のrepo2が既にrepo1の中にあって、それ自体がリポジトリの場合はrepo2フォルダをどこかへ退避させて作業するとよいと思います。

そしたら、その中にリモートリポジトリrepo2からダウンロードしてきたデータをマージさせます。(右クリック→「TortoiseGit」→「マージ」)

git_merge_exec

方針の部分を「recursive」→「subtree」とすると右側のテキスト欄が有効になるのでそこに「repo2」(さっき作ったフォルダ)を指定します。

これでOKを押すとrepo2の中にリモートリポジトリのrepo2の内容(+さっき作ったファイル)が入っているはずです。

スポンサーリンク
Amazon
  • このエントリーをはてなブックマークに追加

関連記事

人気記事表示ブログパーツの忍者レコメンドを使ってみる

忍者レコメンドとは 今回は忍者レコメンドという人気記事表示のブログパーツを紹介します。忍者レコメン

記事を読む

ソーシャルボタンをブログやサイトに設置する方法

TwitterやFacebookなどのソーシャルボタンを付ける方法です。ソーシャルボタンを付けるには

記事を読む

【MMD】BlenderでCyclesを利用してレンダリングしてみる

Cyclesを使ってみる BlenderのCyclesを用いてレンダリングを試してみました。Cyc

記事を読む

人気記事・ランダム記事等紹介の忍者レコメンドが大幅にパワーアップした件

以前このブログにて忍者レコメンドの紹介記事を書きました。その際にこのブログにも忍者レコメンドを設置し

記事を読む

スクレイピングをサポートしてくれるAPI【kimono】

kimonoというスクレイピングをAPI化してくれるという素晴らしいサービスがあります。

記事を読む

ニコニコ動画のURLリンクから外部プレイヤーのスクリプトに正規表現で置換する

ニコニコ動画の動画のアドレスを抽出して外部プレイヤー貼りつけソースのスクリプトに変換するソースです。

記事を読む

ニコニコ動画の検索APIについて調べたのでメモ

ニコニコ動画にはAPIがあり、動画の情報(タイトルとか再生数とか)を取得したり、ランキング情報(RS

記事を読む

【さくらサーバー】htaccessを使って拡張子無しでアクセスする

さくらサーバーで拡張子なしのアクセスする方法について非常に苦労したのでつづっておきます。私は

記事を読む

スマホ向け幅固定サイトの回転時の幅対応方法

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。 下記2点の設定が必要です。

記事を読む

ニコニコ動画やYoutubeのRSSフィードもサムネ付きで手軽に表示できるブログパーツ

通常サイトのRSSだけでなく、ニコニコ動画やYoutubeの動画サイトのRSSを読み込んでサムネ画像

記事を読む

【Unity】他のスクリプトを一括で取得して有効化・無効化を制御する

Unityを使っていて他のスクリプトを一時的に停止させたいと思ったので

テレビの録画をPCやNASで共有する

今までテレビはテレビ用のモニターで見ればいいやと思っていたのですが、さ

【DeepLearning】物体検出手法のSSD(Keras版)を試す (Ubuntu14.04)

はやりのディープラーニングの物体検出手法の一つであるSSDのサンプルを

【Laravel5】既存のDBからデータを取得して表示する

はじめに 今まで作ったWebサイトをLaravel5で見れるようにし

【C++/OpenCV】cv::Matの画像にインパルスノイズを付加する

OpenCVで画像にノイズを付け足したいと思って調べたところ、Pyth

Intel Corei7-7700TでHTC Viveの動作確認

はじめに HTC ViveというVRヘッドセットで遊んでみたのでその

【Python】フォルダ内のカッコ付き数字ファイルを一括でリネームするスクリプト

はじめに タイトルどおりなのですが、指定フォルダ内のファイルのファイ

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑