ちょっと話題の記事

GitHub for Windowsを使ってGitの基本タスクを実行してみる(GUI編&PowerShell編)

2013.08.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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をインストールします。

GitHub for Windows

Github_03

執筆時点での最新バージョンは 1.0 です。

OSに関してはWindows XPからWindows 8までサポートされているようです。

 インストールが完了すると下記3つのショートカットが作成されます。

Github_27

  • GitHub:GitHub利用のためのデスクトップアプリケーション
  • Git Shell:GitHub利用のためにカスタマイズされたPowerShell

GitHub for Windowsには msysGitposh-git も同梱されています。

GitHubへの接続

GitHub for Windowsを起動するとまずはGitHubへの接続設定を行う必要があります。

まずはGitHubのユーザー名またはメールアドレスとパスワードを入力してログインします。

Github_05

次に、再度ユーザー名、メールアドレスを入力します。

Github_05_02

最後にローカルのレポジトリが検索されます。

設定が完了すると下記のリポジトリ一覧画面が表示されます。

Github_06

GitHub for Windowsのオプションの変更

GitHubなどとの連携を行う前に、念の為GitHub for Windowsのオプションを変更しておきます。GitHub for Windowsのトップ画面で中央上部のtoolsボタンをクリックし、ドロップダウンからoptionsをクリックします。

Github_06_02

設定画面が表示されますので、default storage directoryを好きなものに変更しておきます。デフォルトはマイドキュメント直下のGitHubフォルダが指定されています。

Github_06_03

コマンドラインでGitと連携する際に利用するデフォルトエディタも変更できるようですが、ここではPowerShellのままにしておきます。

この段階で、GitHub側にSSH Keyが自動登録されます。鍵の名前は GitHub for Windows - マシン名の様になっています。

GitHubのレポジトリをCloneする

次に、GitHub上のレポジトリをCloneしましょう。ここでは空のプロジェクトを作成して、それをWindows上にCloneしてみます。

下記ではレポジトリ GitHello を作成しています。READMEファイルは作らず空の状態で始めることにします。

Github_01

作成したレポジトリのトップ画面は下記のようになっています。

Github_27

上記の「Setup in Desktop」をクリックしてみます。Google ChromeとInternet Explorerの場合、下記の様な警告が表示されます。

Github_28

Github_29

レポジトリを開くことを許可すると、ローカルにレポジトリがCloneされます。ファイルのダウンロードが完了するとGitHub for Windowsが開きます。

Github_30

レポジトリの中身が空なので、エクスプローラで開いても.gitフォルダのみの空の状態であることがわかります。

Github_33

レポジトリを様々な方法で開く

レポジトリ一覧に戻ってみましょう。レポジトリ画面左上のをクリックして、トップ画面(=レポジトリ一覧)に戻ります。

レポジトリを右クリックすると下記のようなメニューが表示されます:

Github_31

  • 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の画面をご紹介します。

Github_32

レポジトリのディレクトリを参照した状態で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を即されます。

Github_34

「commit message」を入力して、COMMITボタンをクリックします。

いったんレポジトリ一覧に戻り再度レポジトリを開くと、レポジトリの状態が下記のように更新されています:

Github_35

 右の 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を開いてリポジトリの状況を確認しましょう。

Github_38

右の unsynced commits にまだリモートのレポジトリと同期していない commitが表示されています。

共有レポジトリにファイルをpublish/syncする(GitHub for Windows編)

ファイルのcommitが完了したので、共有レポジトリ(ここではGitHub)にファイルをpublishしてみましょう。リポジトリを開いたら上部に publishボタンがあるので、これをクリックします。

暫く待つと、下記のように状態が  in syncに変わります。

Github_39

 ここでGitHubのWebサイトを確認してみます。

 Github_40

2つのファイルが commit されている事やそれぞれの「commit message」も確認できます。ここで Add a README ボタンをクリックして、READMEを追加しておきます。

Github_41

GitHub for Windowsに戻り、いったんTOP画面に戻ってからリポジトリを開きます。すると上部の in sync(同期中)が sync(同期する)に変わります。syncボタンをクリックして同期します。

Github_42

同期が完了すると下記のような感じになります:

Github_43

共有レポジトリにファイルを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_44 Github_45

ファイルを修正したら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にはあるようなので、そちらも今後ご紹介していければと思います。