GitHub for Windowsを使ってGitの基本タスクを実行してみる(GUI編&PowerShell編)
Windows上でGitを使う
Windows 8を使っていて、ソースコードを社内のStash(企業向けGit製品)にアップする必要が出てきたので、GitHub for Windowsを導入してみました。
今回はGitHub for Windowsによる下記タスクに関してご紹介していきたいと思います:
- GitHub for Windowsのインストール
- GitHubへの接続
- GitHub for Windowsのオプションの変更
- GitHubのレポジトリをCloneする
- レポジトリを様々な方法で開く
- ローカルレポジトリにファイルをcommitする(GitHub for Windows編)
- ローカルレポジトリにファイルをcommitする(PowerShell編)
- 共有レポジトリにファイルをpublish/syncする(GitHub for Windows編)
- 共有レポジトリにファイルをpush/pullする(PowerShell編)
※Gitに関して初めての方は、弊社平屋が執筆した下記記事をまずご参照下さい:
ガチで5分で分かる分散型バージョン管理システムGit - @IT
開発環境
- Windows 8
- GitHub for Windows
GitHub for Windowsのインストール
まずはGitHub for Windowsをインストールします。
執筆時点での最新バージョンは 1.0 です。
OSに関してはWindows XPからWindows 8までサポートされているようです。
インストールが完了すると下記3つのショートカットが作成されます。
- GitHub:GitHub利用のためのデスクトップアプリケーション
- Git Shell:GitHub利用のためにカスタマイズされたPowerShell
GitHub for Windowsには msysGit や posh-git も同梱されています。
GitHubへの接続
GitHub for Windowsを起動するとまずはGitHubへの接続設定を行う必要があります。
まずはGitHubのユーザー名またはメールアドレスとパスワードを入力してログインします。
次に、再度ユーザー名、メールアドレスを入力します。
最後にローカルのレポジトリが検索されます。
設定が完了すると下記のリポジトリ一覧画面が表示されます。
GitHub for Windowsのオプションの変更
GitHubなどとの連携を行う前に、念の為GitHub for Windowsのオプションを変更しておきます。GitHub for Windowsのトップ画面で中央上部のtoolsボタンをクリックし、ドロップダウンからoptionsをクリックします。
設定画面が表示されますので、default storage directoryを好きなものに変更しておきます。デフォルトはマイドキュメント直下のGitHubフォルダが指定されています。
コマンドラインでGitと連携する際に利用するデフォルトエディタも変更できるようですが、ここではPowerShellのままにしておきます。
この段階で、GitHub側にSSH Keyが自動登録されます。鍵の名前は GitHub for Windows - マシン名の様になっています。
GitHubのレポジトリをCloneする
次に、GitHub上のレポジトリをCloneしましょう。ここでは空のプロジェクトを作成して、それをWindows上にCloneしてみます。
下記ではレポジトリ GitHello を作成しています。READMEファイルは作らず空の状態で始めることにします。
作成したレポジトリのトップ画面は下記のようになっています。
上記の「Setup in Desktop」をクリックしてみます。Google ChromeとInternet Explorerの場合、下記の様な警告が表示されます。
レポジトリを開くことを許可すると、ローカルにレポジトリがCloneされます。ファイルのダウンロードが完了するとGitHub for Windowsが開きます。
レポジトリの中身が空なので、エクスプローラで開いても.gitフォルダのみの空の状態であることがわかります。
レポジトリを様々な方法で開く
レポジトリ一覧に戻ってみましょう。レポジトリ画面左上の←をクリックして、トップ画面(=レポジトリ一覧)に戻ります。
レポジトリを右クリックすると下記のようなメニューが表示されます:
- open: GitHub for Windows上でレポジトリを開きます。
- view on github: ブラウザでレポジトリを開きます。
- open in explorer: エクスプローラでレポジトリを開きます。
- open a shell here: シェルでレポジトリを開きます。デフォルトのシェルはPowerShellです。
- stop tracking this repo: GitHubとの連携を解除します。
ここでは、「open a shell here」で開いたPowerShellの画面をご紹介します。
レポジトリのディレクトリを参照した状態でPowerShellが起動します。上記の画面からわかるようにPowerShellはGit用に改造されています!
レポジトリディレクトリのパスの後ろには[master]と表示されており、masterブランチで作業中であることがわかります。
同様にウィンドウのタイトルにも [master] と表示されています。
GitHub for Windowsをインストールすると、PowerShellによるGitとの連携が可能になります。Git操作をコマンドラインのみで行うことも可能になります。逆に、WindowsではGUIツール、Visual Studio、PowerShellなどを組み合わせてGitと連携することも可能です。
ローカルレポジトリにファイルをcommitする(GitHub for Windows編)
レポジトリのディレクトリに適当なテキストファイルを作成し、それをローカルレポジトリにcommitしてみましょう。
エクスプローラでGitHelloのフォルダを開き、hello.txtを作成します。ファイルには「Hello World!」と書いておきます。
GitHub for Windowsでレポジトリを開くと下記のようにファイルが認識され、commitを即されます。
「commit message」を入力して、COMMITボタンをクリックします。
いったんレポジトリ一覧に戻り再度レポジトリを開くと、レポジトリの状態が下記のように更新されています:
右の unsynced commits にまだリモートのレポジトリと同期していない commitが表示されています。
ローカルレポジトリにファイルをcommitする(PowerShell編)
レポジトリのディレクトリに適当なテキストファイルを作成し、それをローカルレポジトリにcommitしてみましょう。
エクスプローラでGitHelloのフォルダを開き、test.txtを作成します。ファイルには「test」と書いておきます。
PowerShellを開き、 git statusコマンドを実行すると下記のようにトラックされていないファイル (test.txt)が認識されます:
D:\xxxxx\GitHello [master +1 ~0 -0 !]> git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # test.txt nothing added to commit but untracked files present (use "git add" to track)
git addしなさいと即されているので、git add test.txtします。再度 git statusコマンドを実行すると下記のようになります。
D:\xxxxx\GitHello [master +1 ~0 -0 !]> git add test.txt D:\xxxxx\GitHello [master +1 ~0 -0]> git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: test.txt #
git addによりtext.txtがインデックスに追加されました(Gitによって認識され追跡された状態になりました)。しかし、まだローカルレポジトリにcommitされてはいません。上記でも「Changes to be committed(コミットされていない変更)」がありますよと言われているので、git commit test.txtを実行することにします。コマンドを入力するとデフォルトのテキストエディタが開くので「commit message」を入力して、エディタを閉じます。
D:\xxxxx\GitHello [master +1 ~0 -0]> git commit test.txt [master 5de3f8d] Power Shellでcommitしてみた。 1 file changed, 1 insertion(+) create mode 100644 test.txt Warning: Your console font probably doesn't support Unicode.(以下略)
最後にgit statusコマンドを実行すると、ローカルでcommitされていないものが無くなり、クリーンな状態であることが確認できます。
D:\xxxxx\GitHello [master]> git status # On branch master nothing to commit, working directory clean
git log -1コマンドを実行すると、直前の作業のログを確認することが出来ます。
D:\xxxxx\GitHello [master]> git log -1 commit 5de3f8d7fd48ff453b75aa70d56cf82936eef1ea Author: Cronoloves <cronoloves@gmail.com> Date: Wed Aug 21 16:07:16 2013 +0900 Power Shellでcommitしてみた。
ここでGitHub for Windowsを開いてリポジトリの状況を確認しましょう。
右の unsynced commits にまだリモートのレポジトリと同期していない commitが表示されています。
共有レポジトリにファイルをpublish/syncする(GitHub for Windows編)
ファイルのcommitが完了したので、共有レポジトリ(ここではGitHub)にファイルをpublishしてみましょう。リポジトリを開いたら上部に publishボタンがあるので、これをクリックします。
暫く待つと、下記のように状態が in syncに変わります。
ここでGitHubのWebサイトを確認してみます。
2つのファイルが commit されている事やそれぞれの「commit message」も確認できます。ここで Add a README ボタンをクリックして、READMEを追加しておきます。
GitHub for Windowsに戻り、いったんTOP画面に戻ってからリポジトリを開きます。すると上部の in sync(同期中)が sync(同期する)に変わります。syncボタンをクリックして同期します。
同期が完了すると下記のような感じになります:
共有レポジトリにファイルをpush/pullする(PowerShell編)
先ほどと同様の作業をPowerShellで行ってみます。test.txtを修正します。ここでは test2 というテキストを追加しています。次に、 git commitを実行します。
最後に、共有リポジトリへ変更を反映するために git pushを実行します。
D:\xxxxx\GitHello [master]> git push Counting objects: 5, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 287 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To https://github.com/cronoloves/GitHello.git df2d49d..d251c19 master -> master
しばらくすると上記のように変更のアップロード結果が表示されます。GitHubのWebサイトを確認すると変更が反映されていることがわかります。
ここでGitHubのWebサイト内で先ほど修正した test.txt を修正します。
ファイルを修正したらGitHub上でcommitしておきます。
ではこの変更をPowerShellでローカルレポジトリに取り込んでみましょう。PowerShellで git fetchを実行します。
D:\xxxxx\GitHello [master]> git fetch remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From https://github.com/cronoloves/GitHello d251c19..84f5a8f master -> origin/master
これでローカルレポジトリに先ほどの変更が反映されます。しかし、エクスプローラで実際の text.txt を確認すると変更されていません。まずローカルと(HEAD)と共有リポジトリから取得したもの(FETCH_HEAD)の変更履歴を確認しておきます。 git diff HEAD..FETCH_HEADを実行します。
D:\xxxxx\GitHello [master]> git diff HEAD..FETCH_HEAD diff --git a/test.txt b/test.txt index 39bd688..0449994 100644 --- a/test.txt +++ b/test.txt @@ -1,2 +1,3 @@ test -test2 \ No newline at end of file +test2 +test3
上記では test2 が削除され、test2 と test3 が追加されていると表示されています。特に問題が無さそうなので、実際のファイル(作業ツリー)に反映することにします。
ローカルレポジトリから作業ツリーへの反映は git merge FETCH_HEADを使います。
D:\xxxxx\GitHello [master]> git merge FETCH_HEAD Updating d251c19..84f5a8f Fast-forward test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
これでエクスプローラで実際の text.txt を確認すると変更されている事がわかります。
(この git fetchと git merge の一連の作業は git pullで行うことも可能です)
まとめ
GitHub for Windowsを用いてGitの基本的なタスクを実行してみました。
個人での簡単な作業であれば、GUIのみでもいけそうです。また、複数人のプロジェクトであっても、PowerShellでGitコマンドを実行して複雑なリポジトリ管理を行うことも出来そうです。
Windowsでの開発といえばVisual Studioですが、こちらもGitと連携を行うことが可能です。また、他の便利なGit連携のツールもWindowsにはあるようなので、そちらも今後ご紹介していければと思います。