wiki:pm/DVCS

gitの文字化け

gitで日本語したファイル名は文字化けする。

$ git log --summary
...
 create mode 100644 "\343\203\206....txt"

下記のように設定すると文字化けしなくなる。

$ git config --global core.quotepath false
$ git log --summary
...
 create mode 100644 テスト.txt

その他のノウハウは、  http://www.atmarkit.co.jp/fjava/rensai4/devtool26/devtool26_1.html を参照。

gitで認証エラー

gitをサーバにプッシュしようとすると、下記のようなエラーが出ることがる。

# git push

(gnome-ssh-askpass:23903): Gtk-WARNING **: cannot open display:

OSをGUIモードでインストールした場合、認証をgnome-ssh-askpassを利用して行おうとしてウィンドウを起動することがある。その場合、上記のようなエラーが発生する。この場合、下記のように設定してやればよい。

# unset SSH_ASKPASS

不正な証明書でのSSL接続

オレオレ証明書でSSL接続すると、エラーになる。オレオレ証明書で、

$ git config --global http.sslVerify false

gitのtips

git addで追加したファイルのキャンセル

$ git rm --cached xxx

でaddで追加したファイルをコミット対処から除く。

コミット前に戻りたい

コミットをやり直したい場合は、reflogを使って次のようにする。(変更したファイルはそのまま)

$ git reflog
8855c0b HEAD@{0}: commit: test2.
b2e884f HEAD@{1}: commit (initial): test1.

$ git reset HEAD@{1}   // test2のコミットを取消
Unstaged change after reset:
M      test
$ git log
...
test1.

resetを行うときに

$ git reset --hard XXX

のようにすると、ファイルの変更内容も取り消すことができる。

コミットのやりなおし

間違えたユーザ名でコミットしてしまったときにコミットをやり直すコマンド。

$ git commit --amend --reset

リモートブランチの作成

リモートに作成したいブランチ上で

$ git push origin remote-branch-name

ブランチの削除

ローカルブランチの削除

% git branch -d mybranch

リモートブランチの削除

% git push origin :mybranch

リモートブランチのプル

.git/configに

[remote "upstream"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://github.com/upstreamer/upstream.git

などと記述し、

$ git pull upstream master

とする。ブランチを指定する場合は、masterを置き換える。

GitのSmart HTTPとGitWebの混在

例えば、 http://hostname/git にWebブラウザでアクセスするとリポジトリを閲覧でき、gitコマンドでアクセスするとリポジトリにアクセスできるようにしたい。 CentOSでは、gitwebパッケージをインストールし/etc/httpd/conf.d/git.confファイルを次のように記述する。下記の例は、/var/lib/git以下にGitリポジトリが複数ある場合である。

SetEnv GIT_PROJECT_ROOT /var/lib/git
SetEnv GIT_HTTP_EXPORT_ALL

Alias /gitweb.css /var/www/git/gitweb.css
Alias /gitweb.js /var/www/git/gitweb.js
Alias /git-favicon.png /var/www/git/git-favicon.png
Alias /git-logo.png /var/www/git/git-logo.png

<Directory /var/www/git>
  Options +ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex gitweb.cgi
</Directory>

ScriptAliasMatch \
        "(?x)^/git/(.*/(HEAD | \
                info/refs | \
                objects/info/[^/]+ | \
                git-(upload|receive)-pack))$" \
        /usr/libexec/git-core/git-http-backend/$1
ScriptAlias /git /var/www/git/gitweb.cgi

また、/var/www/git/gitweb.cgi にGitのルートディレクトリの設定を行う。

our $projectroot = "/var/lib/git";

httpdでの匿名によるcloneのみ許可

クローンは匿名で、プッシュは認証を行ってしたい場合、git-receive-packへのアクセスに認証が必要にするようにする。 具体的には、下記のようにhttpd.confへ記述する。

<LocationMatch ^/git/.*/git-receive-pack$>
   AuthType Basic
   AuthName "Git Repository"
   AuthUserFile /etc/httpd/httpd.password
   Require valid-user
</LocationMatch>

mercurialの文字化け

Mercurialで日本語のファイル名を扱うと、LinuxとWindowsで正しく共有できない。今のところ解決策は、Windows上ではcygwinのmercurialをutf-8環境で使えば解決できる。

$ LANG=ja_JP.utf-8
$ hg ....

fixutf8エクステンションを利用するとこの問題は解決できる。

トピックブランチのなめの付け方 =s

  • OpenStack?
    • bp/12345 BluePrint?(新機能の提案)
    • bug/12345 バグ
  • jQuery
    • 1.8/#12345/ajax
    • 1.8/#12356/CallBacks
    • 次にリリースするバージョン番号/Issue ID/対応するモジュール名