変更のコミット
管理しているファイルに変更を加えた後、コミットを行うことで変更点がGitに記録される。コミットを行うには、「git commit」コマンドを利用する。なお、CVSやSubverseionなどの場合、コミット対象を省略すると変更したファイルが自動的にコミット対象となったが、Gitの場合はコミットするファイルを「git add」コマンドで明示的に指定する必要がある。「git status」コマンドを実行することで修正されたファイルを確認できるので、修正されたファイルのうちコミットしたいファイルを確認し、「git add」でコミット対象に追加するとよいだろう。
たとえば、Gitでバージョン管理を行っているファイルに変更を加えた状態で「git status」コマンドを実行すると、下記のように「Changed but notupdated:」以下に変更が加えられたファイルが表示される。
$ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: HBPreferencesTransFormer.h # modified: HBPreferencesTransFormer.m # no changes added to commit (use "git add" and/or "git commit -a")
この例の場合、「HBPreferencesTransFormer.h」および「HBPreferencesTransFormer.m」が変更されたファイルだ。そこで、「git add」コマンドでこのファイルをコミット対象に追加する。
$ git add HBPreferencesTransFormer.* $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: HBPreferencesTransFormer.h # modified: HBPreferencesTransFormer.m
「git add」コマンドでは変更されたファイルだけでなく、新たに作成したファイルも追加できる。一通りコミットしたいファイルを指定したら、最後に「git commit」コマンドでコミットを実行する。
$ git commit Created commit a3ab45b: Add ValueTransformer method. 2 files changed, 31 insertions(+), 3 deletions(-)
なお、「git commit -a」のように「-a」オプション付きでコミットを実行することで、変更されたファイルを自動的にコミット対象に加えてコミットを実行することもできる。
ローカルリポジトリに加えた変更をリモートリポジトリに送信する
ローカルリポジトリに加えた変更をリモートリポジトリに送信するには、「git push <リポジトリ名>」コマンドを利用する。ローカルリポジトリでの作業が一段落し、加えた変更点をマスターリポジトリ(たとえばSourceForge.JPのGitリポジトリなど)に送信する場合などに、このコマンドを利用する。
たとえば、ユーザー名「hoge」で「git.sourceforge.jp:/gitroot/test/test.git」というリポジトリに変更点を送信したい場合、次のように実行する。
$ git push hoge@git.sourceforge.jp:/gitroot/test/test.git Counting objects: 9, done. Compressing objects: 100% (5/5), done. Writing objects: 100% (5/5), 841 bytes, done. Total 5 (delta 3), reused 0 (delta 0) To test@git.sourceforge.jp:/gitroot/test/test cf6c47c..a3ab45b master -> master
なお、自分が行った変更と競合するような変更がすでに行われていた場合、次のようなメッセージが表示されてpushに失敗する。
$ git push hoge@git.sourceforge.jp:/gitroot/test/test.git To hoge@git.sourceforge.jp:/gitroot/test/test.git ! [rejected] master -> master (non-fast forward) error: failed to push some refs to 'hoge@git.sourceforge.jp:/gitroot/hoge/hoge'
この場合、競合を解消してから再度pushを実行する必要がある。もっとも簡単なのは、後述する「git pull」コマンドを使用して競合部分を取得し、ローカルリポジトリを修正する方法だ。
SourceForge.JPでGitリポジトリを利用する場合の注意点
SourceForge.JPでは、各プロジェクトが利用できるGitリポジトリが用意されている。リポジトリの作成は、各プロジェクトの「ソースコード」タブ内にある「Gitリポジトリ管理」で行える。
なお、リポジトリ作成後の初回のpush時は、下記のように明示的にブランチを指定する必要があるので注意してほしい(この例では「master」がブランチ名)。
$ git push hoge@git.sourceforge.jp:/gitroot/test/test.git master Enter passphrase for key '/home/hoge/.ssh/id_dsa': Counting objects: 847, done. Compressing objects: 100% (817/817), done. Writing objects: 100% (847/847), 8.64 MiB | 332 KiB/s, done. Total 847 (delta 333), reused 0 (delta 0) To hoge@git.sourceforge.jp:/gitroot/test/test.git * [new branch] master -> master
