「Git」カテゴリーアーカイブ

Gitでリモートブランチとローカルブランチの差分を表示する

まず、リモートブランチを最新に更新しておく。

$ git fetch
$ git svn fetch  # git-svnでSubversionレポジトリをリモートリポジトリに持つ場合

リモートブランチを確認。

$ git branch -a
* master
  remotes/origin/master
  remotes/svn/tags/RELEASE_20101022
  remotes/svn/tags/RELEASE_20101025
  remotes/svn/trunk

現在のローカルブランチとリモートブランチの差分を表示。

$ git diff remotes/origin/master

現在のローカルブランチとリモートブランチの差分を表示(簡易表示)

$ git diff --name-status remotes/origin/master

現在のローカルブランチとリモートブランチの差分を表示(簡易表示、Subversionレポジトリ)

$ git diff --name-status remotes/svn/trunk

情報源: git svn status - showing changes that are not committed to svn - Stack Overflow

Redmineでレポジトリをgitと連携した場合のエラー

Redmineでレポジトリをgitと同期するため、cronでRepository.fetch_changesetsをscript/runnerで実行したら、
git: not found
となって同期できなかった。
redmine/lib/redmine/scm/adapters/git_adapter.rbを

#GIT_BIN = "git"
GIT_BIN = "/usr/local/bin/git"

のようにgitへのパスを設定するようにしたら解決。(※)

RedmineとGitの連携で「リポジトリに、エントリ/リビジョンが存在しません」と出た時の対処法 « Sinner The Sinner

※ r4795, r4797で、configuration.ymlにscm_git_commandを設定できるようになったので、上記修正は不要になった。

その他に、gitレポジトリのディレクトリ(xxxx.git)へアクセス権がない場合、Redmineで連携したレポジトリを見ると、「リポジトリに、エントリ/リビジョンが存在しません」となってしまう。
その場合は、

$ sudo chmod o+rx xxxx.git
  • gitosisやgitoliteでgitユーザのホームディレクトリにレポジトリがある場合は、gitユーザーのホームディレクトリもo+rxしておく。

cygwinのgitで日本語を文字化けさせない

cygwinのgitでは、以下を設定すれば、vimでのコミットメッセージに日本語が使用でき、コミットログもUTF-8に統一された。
(cygwinのターミナルはPoderosaを使用して、エンコーディングをUTF-8にしておく。)
.vimrcに以下を設定する。

set termencoding=utf-8
set encoding=utf-8
set fileencodings=utf-8,iso-2022-jp,shift-jis,euc-jp

・git configで以下を設定する。

$ git config --global i18n.commitencoding UTF-8

参考: cygwinのgitで日本語を文字化けさせない - もうカツ丼でいいよな
・git logがpager(lessとか)で表示されると、UTF-8のログメッセージがエスケープされて表示されるので、pager を cat にする。

$ git config --global core.pager cat

参考: git-config core.pager を cat にした / core.editor を emacsclient にした - 刺身☆ブーメランのはてなダイアリー
■ 問題点
.vimrcのfileencodingsの一番目をutf-8にしたことにより、どのファイルを開くときもutf-8として認識されてしまう。でもそうしないと、最初に開くときに既にASCIIだけのテキストであるgitのコミットメッセージはUTF-8にならない。
参考
ずんWiki - vim

vim の文字コード判定の仕組みは以下の通りです。
fileencodings の設定を前から順に試してはじめにマッチしたものが採用される
* encoding や fileencoding の設定値が途中に発見されるとそこで判定を止めてしまい後の設定は無視される
o この動作により、UNIX環境(euc-jpの場合)では euc-jp が fileencodings の前の方に設定されていると、cp932 や utf-8 で書いたファイルが文字化けてしまうので気をつける必要がある。
* encoding に設定される文字コードは fileencodings に見つからなかったときのデフォルト値に使われるので fileencodings に設定する必要は無い。