[ ツール | 追加 ] で、テキスト・エディターを登録します。
[ ツール | (エディター名) ] を選ぶと、作業ディレクトリに入っている、現在選択して
いるファイルを開きます。 なお、作業ディレクトリに入っているファイルを開くだけで、
差分は分かりません。
Git GUI に表示されたファイルから、作業ディレクトリに入っているファイルの編集を
開始するときは、[ ツール ] メニューを使います。
関連
このウィンドウは、追加するときしか表示されず、内容を後から編集することはできません。
あらかじめテキストエディタで内容を作成しておくとよいでしょう。
空白文字を含むパスを指定する方法は不明です。 " " で囲んでも、\ でエスケープ
しても起動できません。 WSH を起動する場合は、cscript を指定した場合のみ、
空白文字を含むスクリプトへのパスを指定することができます。
cscript "/C/vbslib new/Prompt.vbs" OpenFolder "$FILENAME"
サンプル:
その他
複数の開発者が共同開発する場合、全員の開発物を受け入れる共有リポジトリと、
それぞれの開発者のリポジトリという構成になります。
複数の開発者が共同開発する場合、全員の開発物を受け入れる共有リポジトリと、
それぞれの開発者のリポジトリという構成になります。
ここでは、共有リポジトリの作成方法を説明します。 ネットワークの設定も別途必要ですが、
ここでは説明していません。 下記の「参考」を参照してください。
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, ...
共有リポジトリは、通常ベアリポジトリにしますが、Git GUI ではできません。 Git Bash の
手順を参照してください。 ここでは、Git GUI でも簡単に代用できる方法を説明します。
共有リポジトリの現在のブランチを、master ブランチとは別のブランチにします。
初期状態では master ブランチしか存在しないので、新しいブランチを作成し、
そのブランチをチェックアウトしてください。
Git GUI の手順
共有リポジトリ:
共有リポジトリ:
こうする理由は、サーバーにあるリポジトリの現在のブランチに対して、開発者から
プッシュ(アップロード) しようとすると、下記のエラーが発生するためです。
参考 → ベアリポジトリ (作業ディレクトリを持たないリポジトリ)
参考
リーダー的な開発者のリポジトリが共有リポジトリを兼ねる場合は、上記のように
新しく作成するブランチ(下記のnew)を、現在のブランチにして作業してください。
関連
共有リポジトリ:
master ブランチが、共有するブランチ
mkdir ProjectA.git
cd ProjectA.git
git --bare init --shared
Git Bash の手順
ssh などでサーバーにログインして、下記コマンドを実行します。
ローカルからサーバーのリポジトリへプッシュしてください。
[ リモート | 追加 ]
名前は通常 [origin]、場所は例えば、[pc01.com:/proj/ProjectA.git]
[ プッシュ ]
Git GUI の場合、
サーバーに作成するブランチを選ぶ
[ 送り先リポジトリ | リモート ] で、リモート名を選ぶ
ベアリポジトリを作成するには、
通常のリポジトリ(ベアリポジトリではない)を作成するには、
ssh などでサーバーにログインして、下記コマンドを実行します。
cd ProjectA.git (作業ディレクトリ)
git init
echo start>readme.txt
git add *
git commit -m 'seed'
git branch server
git checkout server
seed
readme.txt
start
server
server
ProjectA.git (作業ディレクトリ)
通常のリポジトリを作成する
ProjectA.git
ProjectA.git
続き
共有リポジトリを複製して、開発者Aのリポジトリを作成します。
開発者Aのリポジトリ:
Git GUI の手順
修正用のブランチ(下記new)を作成して、現在のブランチをそのブランチに変更して
ください。(右クリック [ このブランチをチェックアウトする ] )
その後、作業ディレクトリを修正&コミットできます。
開発者Aのリポジトリ:
修正後に(ローカルで)コミットすると下記のようになります。
開発者Aのリポジトリ:
関連
開発者Aのリポジトリ:
サーバーにある複数の開発者で共有するリポジトリを修正するために、ある開発者Aの
ローカルに複製(クローン)して、開発者A用のブランチを作れば、作業ディレクトリの修正
を開始することができます。
共有リポジトリ origin:
master ブランチが、共有するブランチ
更に、共有リポジトリとマージしてサーバーにプッシュするときは、
remotes/origin は、サーバーにある origin リポジトリを指す
new ブランチが、開発者Aの修正用ブランチ
修正を開始するコミットを探します。
修正が完了したら、
プッシュしたときに下記のエラーが出るときは、共有リポジトリの現在のブランチを
変更してください。
git push リポジトリ名 ブランチ名
Git Bash の手順
参考
Git GUI の手順
開発者Aのリポジトリ:
現在のブランチ(下記 new)をコミットすると、ローカルの
共有リポジトリとマージしてプッシュすれば、修正内容がサーバーに反映されます。 更に
サーバーの master ブランチも移動します。
[ リモート | 取得元 | origin ] でフェッチします。
[ リポジトリ | すべてのブランチの履歴を見る ]。
Git GUI のメイン・ウィンドウの中央下にある、[ プッシュ ] ボタンを押します。
元のブランチを 「master」を選択し、必要なら [ タグを含める ] にチェックし
[ プッシュ ] を押します。
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, ...
ローカルの master ブランチを右クリック [ このブランチを除去する ]。
現在のブランチのコミット・メッセージ(ver0.2)を右クリック [ 新規ブランチ生成 ] で、
master ブランチを再生成します。
ローカルの master ブランチとサーバーの master ブランチが同じコミットにあるとき:
ローカルの master ブランチとサーバーの master ブランチが異なるコミットにあるとき:
ローカルの master ブランチを右クリック [ このブランチを除去する ]。
現在のブランチのコミット・メッセージ(ver0.2)を右クリック [ 新規ブランチ生成 ] で、
master ブランチを再生成します。
Git GUI のメイン・ウィンドウの [ マージ | ローカルマージ ] で、master ブランチを選ぶと、
現在のブランチ(new)と master ブランチをマージします。
CONFLICT (content): Merge conflict in ...
コンフリクト(同じ箇所を違う内容で修正)していたら、下記のエラーメッセージが出ます。
コンフリクトを解決してください。
[ リポジトリ | すべてのブランチの履歴を見る ]。
ローカルの master ブランチを右クリック [ このブランチを除去する ]。
現在のブランチのコミット・メッセージ(Merge branch...)を右クリック [ 新規ブランチ生成 ]
で、master ブランチを再生成します。
Git GUI のメイン・ウィンドウの中央下にある、[ プッシュ ] ボタンを押します。
元のブランチを 「master」を選択し、[ プッシュ ] を押します。
リポジトリだけにしか反映されません。
プル、マージ、プッシュという手順をとる必要があります。
作業ディレクトリの内容を固定します。
ベアリポジトリの場合、一度プッシュしたら、やり直せません。
[git push -force origin master] は使えないことが多い。
サーバーにあるリポジトリがベアリポジトリでなければ、やり直すことはできます。
参考
[ リポジトリ | すべてのブランチの履歴を見る ]
Git GUI の手順
パッチを適用する前のコミットをチェックアウトします。
パッチを適用した後のコミットを右クリック [ パッチ作成 ]
Git Bash の手順
git log -p
参考
git diff --no-prefix HEAD~
すべての履歴を diff 形式で表示する
1つ前のコミットから最新のコミットへの差分を
diff 形式で表示する。
--no-prefix があると、
ときに -p1 オプションが -p0 オプションに変わります。
patch コマンド
を使う
git diff
最新のコミットから、現在のワーク・フォルダーの内容への差分を
diff 形式で表示する。
下記のコマンドは、diff の出力形式と同じです。 リダイレクトして保存したファイルは、
patch コマンドに渡すことができます。
first
second
para_second
merge1
master
parallel
para_third
third
merge2
merge3
fourth
para_fourth
次のようにブランチを作成すると、基本セットと拡張セットのような2つのエディションを
同期しながら開発できます。
共通セット
拡張セット
ブランチ
コミット
進捗
上記の場合、parallel の修正を master に反映させるマージをしていますが、逆方向には
マージしていません。 この場合、parallel は共通セット、master は拡張セットになります。
parallel の修正は、マージすると master に反映されます。
parallel の修正を受け入れたくないときは、マージした後で元に戻してください。
元に戻したことが、拡張仕様となります。
Git の管理下にあるフォルダーのサブ・フォルダーを、別のバージョン管理に任せるとき、
そのフォルダーを、サブモジュールと呼びます。
親の Git は、サブモジュールに対して、コミット単位の変化のみ検出し、ファイルの修正など
細かい差分は関与しません。
参考
git clone git://github.com/schacon/myproject.git
git submodule init
git submodule update
未確認
git rm -r rack
git submodule add git@github.com:schacon/rack.git rack
未確認
参考
Android の開発ワークフローにおいて、いくつかの Git オペレーションをまとめて行います。