読者です 読者をやめる 読者になる 読者になる

自己言及器官

プログラマーワナビー

WindowsにおけるGitの導入 (書きかけ)

このドキュメントはGitの導入につまづいている友人のために書かれた。
目標はcommitとpushの使い方を覚え、彼の書いたコードをGitHubに上げられるようになるまでである。

Gitをインストール

  • まず、Git for Windowsをダウンロードする。
    Git for Windows
    環境変数関連の設定は Use Git from Git Bash Only で問題無し
    同様にUse OpenSSHも選択、改行コード関連はたぶんWindows-Styleでいいと思う。

インストールが終わったら、スタートメニューからGit Bashを起動、Git GUIも存在するが
CLIのGitを覚えた方が絶対良い。

絶対に知る必要のあるCLIの基礎的なコマンド

$ cd src # srcディレクトリに移動する
$ cd .. # 1つ上のディレクトリに移動する
$ ls # カレントディレクトリのリストを表示する
$ ls -a # カレントディレクトリのリストを隠しファイル・フォルダを含めて表示する
$ pwd # カレントディレクトリの場所を確認する

初期化

Git Bashからgitで管理したいフォルダにcdで移動する、大抵は管理する対象はソースコードだが
テキストであれば何でも差分で管理できる(バイナリは向いていない)
移動した後

$ git init

でgitを初期化できる。 さらにあなたがやるべきことはGitに自分が何者か教えることだ、つまり自分のユーザーネームとメールアドレスを設定することである。

$ git config --global user.name AIUEO
$ git config --global user.email AIUEO@example.com

とすると設定できる、もちろんAIUEOやAIUEO@example.comは自分が設定したい物に置き換えて設定する。

Initial Commit

まずは何か一つファイルを管理してみよう、管理したいファイルが例えば start.javaならこうだ。

$ git add start.java

もしもカレントディレクトリ以下のファイルをすべて管理対象にしたい場合はこうする。

$ git add .

コミットするにはこうだ。

$ git commit -m "Initial Commit"

-m 以下のオプションはコミットメッセージである。こう書くと"Initial Commit"がそのコミットのメッセージになる。 このコミットではstart.javaをコミットしたとする。この後start.javaの開発を進めて内容が変更したとする、この変更を記録するには同様に

$ git add start.java
$ git commit -m "開発をすすめた"

とすると変更を記録できる。
ここでコミットのログを見てみたいとする、そうするには

$ git log

とするとコミットログが表示される。例えばこうだ

commit 41e90963f04ffc8d88e7dd97e7a7f5d82d6fb36e
Author: tSURooT <XXXXXX@example.com>
Date:   Sun Jan 4 22:38:40 2015 +0900

    開発をすすめた

commit 32568aebff5f6f07f530217cfc5a7e6d6d58190d
Author: tSURooT <XXXXXX@example.com>
Date:   Sun Jan 4 22:27:48 2015 +0900

    Initial Commit

とりあえず自分の書いたコードをGitHubにあげたい時

まずGitHubから上げるためのリポジトリを作成する。
GitHubにログインし、右上の"+"のアイコンから"New repository"を選択、 Repository name、Descriptionを書く。
すでにGitで管理しているリポジトリを上げる場合、"Initialize this repository with a README"や"Add .gitignore"や"Add a license"はチェックをつけなかったり、Noneを選択すると楽だろう。(上げる際に衝突しないように)
ここではすでにGitHubにあげたいリポジトリを持っていることを想定する、 まずリポジトリのディレクトリに移動し、

$ git remote -v

とすると、リモートのリポジトリの登録が見れる おそらく何も登録されていないので何も出力されていないはずだ。
ここでリモートのリポジトリを登録するには

$ git remote add [shortname] [url]

とする、さきほどあなたはGitHubで空のリポジトリを作成したはずである。なのでこの空のリポジトリを登録しようと思う。
この作成空のリポジトリのURLが"https://github.com/tSU-RooT/test" だったなら(Repository nameとURLの最後は同じになる。)
[url]には https://github.com/tSU-RooT/test が入る。[shortname]にはoriginと入れるといいだろう。これは初歩の段階ではおまじないだと思って良い。
さてあなたの書いたコードをGitHubに上げるにはこの後、pushすれば良い。pushするには

$ git origin master

とする。これはoriginと名前をつけたリモートのmasterブランチに対して、今いるブランチをpushするという意味だが今理解する必要はないだろう。
このコマンドを打った後、おそらくGitHubからパスワードの入力を求められると思う。あなたがGitHubに公開鍵を登録していればこの手間は必要ないのでこの方法は後述する。
さてこのpushに成功すればあなたのGitHub上のリポジトリにコードが上がっているはずだ、確認してみよう。

GitHubに上げる場合の注意点

GitHubの公開リポジトリに上げたコードは全世界に公開されるし、forkする権利が公衆に開かれることになる。
もし自分のコードが公開したくないならGitHubには上げないほうが良い。
非公開リポジトリの作成は有料会員になる必要がある。

公開するコードのライセンスについて

基本的にあなたが書いたコードには著作権が存在するので、それを公開する際には できるかぎりライセンスを設定するのが望ましい(ライセンスを設定しないとGitHubの規約によってforkだけはできるものの、誰も改造したり再配布することができなくなってしまう)
ライセンスの選択と詳細についてはこういった物を読むと良い
Qiita:ライセンスの選択を恐れる必要はありません
さまざまなライセンスとそれらについての解説
ライセンスを宣言するには、ディレクトリのトップに"LICENSE"や"LICENSE.txt"というファイルを作ってそこに宣言するのが一般的だ。

公開鍵の作成

すでに公開鍵を持っていて、自分で設定できる技量があるなら飛ばしてOK
公開鍵と秘密鍵について素養が無い場合、Wikipediaを読むと良い
まずGit Bashから

$ ssh-keygen 

と打ち込む すると

Generating public/private rsa key pair.  
Enter file in which to save the key (/Users/tsuroot/.ssh/id_rsa):

という風に表示されるので、ファイル名を変えたい場合以外はそのままEnterを押す。 次に

Created directory '/c/Users/tsuroot/.ssh'.
Enter passphrase (empty for no passphrase):

と出るので、ここで秘密鍵にパスワードをかけることができる。かけておくと多少安全である。
パスワードの再入力もすませると公開鍵と秘密鍵が作成され、fingerprintやrandomart imageが表示される。
ファイル名を変えていなければ、秘密鍵は'ホームフォルダ/.ssh/id_rsa'、公開鍵は'ホームフォルダ/.ssh/id_rsa.pub'に保存されている。このうち".pub"のついていない方のファイルは絶対に他人に渡してはいけない。一方".pub"のついたファイルはしばしばコピペして使うことになる。
さてGit Bashを起動させた後、特にカレントディレクトリを移動していなければホームフォルダにいるはずだ。それならば

$ cat .ssh/id_rsa.pub  

で表示できる。(略)

ほかのコマンドについて知りたいとき

Gitの他のコマンドを使えば履歴を書き換えたり戻したりすることができる、 こういった物を読むと良い。
commitとpushしかできない人のためのgithubの使い方まとめ
初心者がプルリクまでに覚えるべきたった 9つの厳選 Gitコマンド

もっと詳しい入門(本)

入門Git

入門Git

この本はGitのトップメンテナーである、濱野 純氏によって書かれている。
Gitの開発トップは日本人が務めている、(初期バージョンの開発はLinuxカーネルの作者であるLinus Torvalds氏)
そこらへんの事情はここにも詳しい。

このブログの記事は必要である範囲で他の著作物を引用していることがあります。また指摘・修正を受け付けます