【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
  • このエントリーをはてなブックマークに追加

関連記事

【HTML/CSS】タイトルロゴ画像の設定の方法

自分のブログやサイトのタイトル部分にトップ絵画像を設置する方法です。方法としてはimgタグをHTML

記事を読む

お名前.comのでサブドメインを取得してロリポップで使う方法

タイトルどおりなのですがお名前.comで取得した独自ドメインからサブドメインを取得し、ロリポップで使

記事を読む

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

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

記事を読む

さくらとロリポップのcronについての比較

私は今さくらのレンタルサーバーとロリポップのレンタルサーバーを両方試してみているのですがそのcron

記事を読む

関連記事を表示させるブログパーツLinkWithinの導入方法

LinkWithinについて ブログに関連記事を表示するパーツ『LinkWithin』を紹介します

記事を読む

指定URLのWebサイトの画面全体をキャプチャする方法

Webサイトのスクリーンショットを撮る方法としてはいくつかありますが、各方法ごとに調べたものを紹介し

記事を読む

YoutubeのURLリンクを外部プレイヤーのものに正規表現で置換する

Youtubeのアドレスを正規表現を使って抽出して外部プレイヤーのフレームに変換・置換するスクリプト

記事を読む

【PHP】Twitterのツイート数やはてぶ数を取得する

指定URLのTweet数の取得 Twitterでツイート数を取得するには指定のURLにアクセスする

記事を読む

Windows7のペイントとGIMPの比較

table.tabletype1{ border-collapse:collapse; ma

記事を読む

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

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

記事を読む

UWSCを使ったソフト自動立ち上げ【SoftEther VPN Server】

やりたいこと 最近SoftEtherという筑波大学発のベンチャー企業

【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようと

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

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。

【PHP】特定のURLからそのAtomやRSSのフィードを抽出する方法

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。 流

フィード抽出ツール(RSS1.0、RSS2.0、atom)

任意URL サイト名 サイトURL RSS1.0

格安プラン限定レンタルサーバー機能比較表(2016年)

はじめに  最近新しい共用サーバーをレンタルしようと思い調査およびそ

kindle unlimitedが便利だったのでお勧めの使い方など感想メモ

 kindle unlimitedというサービスが8/3からAmazo

→もっと見る

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