Git

Gitで過去のコミットのAuthor名とメールアドレスを変更する方法

以前、GitHubのユーザー名とメールアドレスを変更したのだが、GitHubのリポジトリのコミット履歴のAuthor名とメールアドレスに古いものが含まれており、これを新しいものに変更したかったので調べてみた。 Author名とメールアドレスを一括変更 以下のコマンドで一括で変更できるらしい。 $ git filter-branch -f --env-filter \ "GIT_AUTHOR_NAME='<new name>'; \ GIT_AUTHOR_EMAIL='<new email>'; \ GIT_COMMITTER_NAME='<new name>'; \ GIT_COMMITTER_EMAIL='<new email>';" \ <対象コミットリスト> GitではAuthorの他にCommitterを記録しているのでこれも一緒に変更する。 対象コミットリストは、すべてのコミットが対象ならHEAD、対象を制限するならHEAD~20..HEADのように指定する。 実際に実行したコマンドは以下。 $ git filter-branch -f --env-filter \ "GIT_AUTHOR_NAME='sohtaro'; \ GIT_AUTHOR_EMAIL='sohtaro28@gmail.com'; \ GIT_COMMITTER_NAME='sohtaro'; \ GIT_COMMITTER_EMAIL='sohtaro28@gmail.com';" \ HEAD AuthorとCommitter両方を確認するためにgit log --pretty=fullを実行。 通常、AuthorとCommitterは同じだが`git commit –author=“Yamada Taro <yamada@example.com>“の形式でAuthor名を指定できる) $ git log --pretty=full -1 commit 35afa51b289fff2403a6ecd0f3afce4e917034e0 (HEAD -> master) Author: sohtaro <sohtaro28@gmail.com> Commit: sohtaro <sohtaro28@gmail.com> Update public files あっさり変更できた。

Gitの設定ファイル(git-config)のまとめ

Gitの設定ファイルには多くの設定があるが、設定ファイルの種類やよく使うコマンドについてまとめてみた。 設定ファイルの種類 設定ファイルは以下の三つがあり、上から順に優先順位が高い。 ファイルパス 対象 使用するオプション .git/config リポジトリごと --local または指定なし ~/.gitconfig ユーザーごと --global /etc/gitconfig /usr/local/etc/gitconfig など(※1) システム全体 --system (※1)私のPCのWindows7ではC:\Program Files\Git\mingw64/etc/gitconfigにある 設定の一覧を表示 $ git config (--system|--global|--local) -l 現在有効な設定を表示 $ git config -l リポジトリ設定、ユーザー設定、システム設定をあわせて表示される 設定値がどのファイルで設定されているかを表示 $ git config (--system|--global|--local) --show-origin -l 設定ファイルをエディタで編集 $ git config (--system|--global|--local) -e(--edit) 設定(置き換え) $ git config (--system|--global|--local) 設定名 設定値 # 設定が複数ある場合のすべて置き換え $ git config (--system|--global|--local) --replace-all 設定名 設定値 設定の追加 $ git config (--system|--global|--local) --add 設定名 設定値 設定の削除 $ git config (--system|--global|--local) --unset 設定名 # 設定が複数ある場合の1つを削除 $ git config (--system|--global|--local) --unset 設定名 設定値 # 設定が複数ある場合のすべてを削除 $ git config (--system|--global|--local) --unset-all 設定名 よく使う設定一覧 よく使う設定名と設定する内容を表にした。随時追加する予定。

TortoiseGitのアイコンオーバレイが表示されない件の解決方法

TortoiseGitのアイコンオーバレイがなんらかのタイミングで表示されなくなったので解決方法のメモです。 アイコンオーバレイとはエクスプローラーのフォルダやファイルのアイコン上に表示されるマークです。 TortoiseGitの設定確認 TortoiseGitの[設定]-[アイコンオーバーレイ]-[オーバーレイハンドラー]の順に開きます。 TortoiseGit以外で9個のオーバーレイがインストールされているようです。 レジストリの確認 レジストリエディターを起動するをクリックし、レジストリを確認します。 キー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers TortoiseGitで9個とTortoiseGit以外で9個で合計18個のオーバーレイの設定があります。 Windowsの上限は15個のようです。 この上限を超えると優先順位の低いものから表示されなくなるようです。 不要レジストリの削除 解決方法としては、不要なオーバーレイアイコンを削除します。 Dropboxのオーバーレイアイコンが4つありますが、Dropboxはほとんど使ってないので削除します。 ちなみに一番下の三つのオーバーレイアイコンはWindowsで使用しているらしいのでそのままにしておきます。 EnhancedStorageShell Offline Files SharingPrivate 00aswと00avastも削除して問題ないと思いますがとりあえずそのままにしておきます。 PC再起動 オーバーレイアイコンの設定が15個以下になったのでPCを再起動します。 オーバーレイアイコンが表示されることを確認できました。

ローカルリポジトリから共有リポジトリを作成する方法

今回はローカルリポジトリが存在する状態で共有リポジトリを作成する方法を調べてみました。 以下の二つがあるようです。 空の共有リポジトリを作成しローカルリポジトリからプッシュする ローカルリポジトリを共有リポジトリとして複製する 準備 以下のディレクトリを用意します。 共有リポジトリを作成するディレクトリ:c:/share ローカルリポジトリのあるディレクトリ:c:/gittest/hoge (コミット履歴ありのリポジトリ) 方法1.空の共有リポジトリを作成しローカルリポジトリからプッシュ $ cd c:/share # 共有リポジトリは慣例としてディレクトリ名の終わりを`.git`にします $ mkdir hoge.git $ cd hoge.git $ git init --bare --shared --bareはベアリポジトリを作成するオプション。 ベアリポジトリとは作業ディレクトリを持たないリポジトリです。 --sharedはリポジトリを共有するときのアクセス権を設定するオプションで--shared=0666のようにアクセス権を設定します。 パーミッション指定なしの場合は0664です。 同じグループのみに読み書き許可するには0660を指定します。 これで空の共有リポジトリが作成できました。 あとはローカルリポジトリから共有リポジトリにプッシュします。 $ cd c:/gittest/hoge # 送信対象で"*"を指定するとすべてのブランチ、タグがプッシュされるようです $ git push c:/share/hoge.git "*" 方法2.ローカルリポジトリを共有リポジトリとして複製する $ cd c:/share $ git clone --bare c:/gittest/hoge hoge.git --bareはgit initと同様にベアリポジトリを作成します。 方法1.と2.で設定ファイルが微妙に違ったりしますが、特に問題ないと思います。 あとはこのリポジトリをサーバー上に置き、アクセスするためのプロトコルの準備をすると他の開発者と共有できるようになります。

Gitで使うエディタを変更してみる

gitでコミットのメッセージを編集するときなどに使うエディタはviエディタが使われます(※)。viに慣れていない人にとっては他のエディタを使いたいかもしれません。ここではWindows環境で他のエディタを使用するように設定を変更してみます。 (※)ただし、デフォルトエディタ(環境変数VISUALまたはEDITOR)が設定されている場合は、そのエディタが使われます。 エディタを変更する エディタを変更するためには以下のコマンドを実行します。 $ git config --global core.editor "エディタを実行するコマンド" 今回はサクラエディタに変更してみます。 # パスにスペースがあるのでシングルクオーテーションで囲む # -CODE=4はUTF-8で開くためのサクラエディタのオプション # フォルダの区切りは「/」(スラッシュ) $ git config --global core.editor "'C:/Program Files/sakura2-2-0-1_x64/sakura.exe' -CODE=4" # サクラエディタの実行ファイルのフォルダにパスが通っている場合は以下でもOK $ git config --global core.editor "sakura.exe -CODE=4" 実際にファイルを用意し、コミットすると $ echo a > a.txt $ git add a.txt $ git commit a.txt コミットメッセージのファイルがサクラエディタで開きました。 まとめ viに慣れてない、またはお気に入りのエディタがある人は変更するとよいでしょう。

Gitのローカルリポジトリ作成

Gitのローカルリポジトリを作成するには以下の二つの方法があります。 1. ディレクトリでリポジトリを作成(git init) 2. 共有リポジトリを複製する(git clone) 実際にローカルリポジトリを作成してみます。 ディレクトリでリポジトリ作成 Gitで管理したいディレクトリを右クリックし、Git Bash Hereを選択してGit Bashを起動 Git Bashでgit initを実行 $ git init Initialized empty Git repository in C:/gittest/sample/.git/ すると、空のローカルリポジトリとして.gitディレクトリが作成されます。 .gitディレクトリにはリポジトリデータ、設定ファイルなどが入っています。 ローカルリポジトリの作成は、ディレクトリが空の場合でも、すでにファイルが存在する場合でも関係なく実行できます。 なので、開発しているプロジェクトを途中からGitで管理することが可能です。 共有リポジトリを複製 ローカルにある共有リポジトリを複製してみます。 共有リポジトリのパス:c:/share/test.git 複製するディレクトリのパス:c:/gittest # Git Bash起動し複製するディレクトリに移動 $ cd c:/gittest $ git clone c:/share/test.git Cloning into 'test'... done. $ ls test/ testディレクトリができました。 サーバーにある共有リポジトリの複製についてはまた後日やってみたいと思います。

Gitの初期設定

前回、Gitのインストールを行いました。今回はGitを使い始めるためのいくつかの設定をします。 名前とメールアドレスの設定 GitでファイルをコミットしたときにAuthorが記録されるのですが、名前とメールアドレスを設定していないとコミット時にエラーになるので最初に設定しておきます。 以下の二つのコマンドを実行します。 $ git config --global user.name "Yamada Taro" $ git config --global user.email "yamadataro@example.com" git configコマンドはGitの設定を表示したり変更したりするコマンドです。 --globalを指定するとユーザのGitの設定が対象で、指定なしの場合はリポジトリのGitの設定が対象となります。 ~~globalで設定した内容は下記のファイルに書かれます。 ~/.gitconfig このファイルを直接編集してもよいのですが、いちいち開くのは面倒ですのでコマンドの方が便利です。また、以下のコマンドを実行すると.gitconfigをエディタで開くことができ、編集することもできます。 $ git config --global -e または $ git config --global --edit 日本語ファイル名を表示する ファイル名に日本語が含まれる場合、git statusなどでファイル名がエスケープして表示されます。これを防止するには以下のコマンドを実行します。 $ git config --global core.quotepath false これでGitを使うための準備ができました。