Goodbye, World

日々のプログラミングで得た経験を個人的な備忘録としてまとめてます.他のブログ・ページを参考させて頂いている部分が多いので,参考ページへのリンクを併記しております.

初心者のためのGitによるコード管理[Bitbucket編]

仕事上,複数のPCからプログラムの編集を行っていますが,Gitによるバージョン管理は非常に利便性が高く強力です.Bitbucketを利用したGitの利用方法を簡単にまとめます.GitHub等でも同様の方法で運用できると思います.

[参考サイト]:
commitとpushしかできない人のためのgithubの使い方まとめ - Just $ A sandbox

【初心者による初心者のためのGitHub】リポジトリへのプッシュまで。(Rails Ver) - Qiita

個人的 Git & GitHubメモ - MyEnigma

BitBucket(Git)が便利すぎるので使い方をまとめとく:なんとなしの日記

ブランチ切って更新してマージするまでの流れ - Qiita


1.リポジトリの新規作成

該当プロジェクトの格納されているディレクトリに移動し,Bitbucket上で作成したリポジトリのURLをリモートリポジトリ origin として登録しましょう.

$mkdir /path/to/your/project  #If needed.
$cd /path/to/your/project
$git init
$git remote add origin https://YOURNAME@bitbucket.org/YOURNAME/PROJECTNAME.git

 

2.ローカルリポジトリへのcommit/リモートリポジトリへのpush

上記のコマンドでローカルリポジトリ(PC内)とリモートリポジトリ(Web上)を紐付けしたら,次に管理対象のファイルをコミット対象としてaddしましょう.

$git add FILE1 FILE2 ...  #If you want to register all files in the directry, "git add -A" is much more efficient.
$git commit -m 'COMMENTS FOR THIS COMMIT'

ローカルでgitを利用する限りでは上記のコマンドで十分です.ファイルを変更する度に対象をaddし,更新内容をコメント付きでcommitし保存します.

ローカルリポジトリでの変更内容をリモートリポジトリへ反映したい場合はpushで更新をかけます.
ここではoriginとして登録されているURLのmasterブランチにpushしています.

$git push -u origin master  #If you want to use another branch, "master" should be replaced with the BRANCHNAME.

これはデフォルト*1ですが,新規にブランチを切らない限りはこのコマンドが利用できます.後述しますが,他のブランチで作業をしているときには該当するブランチ名で置き換えてください.


3.リモートリポジトリの内容をローカルリポジトリへpull

あるPCからリモートリポジトリに更新をかけていると,リポジトリを共有している他のPCのローカルリポジトリの内容は最新ではなくなっています.リモートと比較したローカルの現在状況を調べるにはfetchを実行します.

$git fetch

また,pullを実行することで,リモートリポジトリとの差分を取得しローカルリポジトリをアップデートできます.fetchを行わずいきなりpullしても問題ありません.
#pull=fetch+mergeですが,fetch後にpullしても問題ありません.詳しくは*2を参照して下さい.

$git pull 
more generally,
$git pull origin master #If you want to use another branch, "master" should be replaced with the BRANCHNAME.

これでローカルリポジトリが最新の内容に保たれます.一方,リモートリポジトリもローカルリポジトリも独立した内容の変更が行われている場合は齟齬が生じ下記のエラーが表示されます.

error: Your local changes to the following files would be overwritten by checkout:
    FILE1
    FILE2
    ...
Please, commit your changes or stash them before you can switch branches.
error: The following untracked working tree files would be overwritten by checkout:
    FILE3
    ...
Please move or remove them before you can switch branches.
Aborting

ここで表示されているローカルな変更内容は削除されてもいいからリモートの内容を引っ張ってきたいとのことであれば,下記のコマンドで対処できます.
#もっと賢いやり方があると思いますが。。。

$git checkout FILENAME #For files which are not staged for commit. If you want to select all files -> "$git checkout ."
$git clean -f #For files which are not tracked.

 

4.branchの新規作成/master branchへの統合

バージョン管理の基本として,安定して動くプログラムはmaster branchに置いておき,機能追加やバグの修正が必要となった時に新規branchを立ちあげ分岐,作業終了後にmasterへmergeして合流する,というものがあります.これにより,常にstableなバージョンを保ちつつ,バグフィックスや機能追加を分離して(=stableなバージョンに影響を与えず)行うことができます.branchの新規作成と該当branchへの移行は下記のコマンドで行います.

$git branch NEWBRANCHNAME
$git checkout NEWBRANCHNAME ("$git checkout -b NEWBRANCHNAME" creates a new branch and moves to it.)

新規ブランチへチェックアウト後は,上記のような作業を適当に行います.この際,リモートへのpushの対象がmaster->NEWBRANCHNAMEになることに注意して下さい.

branchでのプログラムの変更が終了した際には,分岐元(今回はmaster)へcheckout後,対象branchのmergeを行います.

$git checkout master
$git merge NEWBRANCHNAME

その他,細かな注意点や他のコマンドの詳細については*3を参照して下さい.またmerge後branchが不要になった場合は削除しておいて下さい*4


以上が基本的な手順です.状況に応じて他のコマンドも必要になると思いますので,Tipsへのリンクをいくつか記しておきます.