git cloneするときにブランチ指定して–depth指定する

よくチュートリアルのなどで

なんて感じでcloneして使うやり方を書いてあったりするけども

普通にgit cloneすると
他のブランチの情報とかも管理ディレクトリに持ってきている状態なので
ディスク容量も食うし、cloneする時間もかかる。

そこで、特にgit的な操作は以後しないのであればgit shallow cloneするのが良い。
やり方は

こうすると、ブランチの最新のリビジョンだけを持ってきてくれる。

gitにExcelファイルあげちゃった。そして差分も見たいです。

gitにExcelファイルあげちゃった。そして差分も見たいです。

エンジニア以外にもgithubを使い出しているところが増えつつありますが、

このような要望が少なくありません。

エンジニアとしては、それはExcelがちょっと・・・という感じかもしれませんが

非エンジニアとしてはExcelが自分の仕事の表現手段、というか

やはり操作感は他のツールとは別格かと思います。

そこにエンジニア目線で別のツールを押しつけるのもどうかと思ったりもします。

※別のツールを提供した方が効率が上がるケースももちろんあるので、その場合は提供した方が良いです。

ということで、Excelファイルをgitにあげて管理したい、しかも差分も見たいと言った場合

gitの設定を少しいじると雑ですが差分が出るようにはなります。

macの場合

前提条件

GOでコンパイル出来る環境

使用するもの

https://github.com/tokuhirom/git-xlsx-textconv

インストール

~/.gitconfig

を開きます。

git cloneしたリポジトリの直下に

.gitattributeファイルを作成します。

を追記します。

これでxlsxの結果が比較できるようになりました。

row追加

row削除

シート名変更

GOがコンパイル出来ない環境、Windows環境の場合のは、後日

git cloneした時に、Gtk-WARNING **: cannot open display:

git cloneしたときに

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

という表示が出てエラーになる。

どうも、SSHの処理がパスワード入力ダイアログを出したいらしい。

これに関連する環境変数が

SSH_ASKPASS

という事で、これをunsetして見ます。

これで、無事git clone出来るかと思います。

TortoiseSVN・TortoiseGitでマージツールにお悩みの場合にはP4Mergeを

TortoiseSVNや、TortoiseGitで、競合が発生した場合に使用するTortoiseMergeですが、あまり使い勝手が良いとはいえないです。

そんなときは、P4Mergeを入れてみましょう。

インストールは

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

から。

キャプチャ

このように、Visual Merge Toolのみを有効にして、後は無効にします。

これでインストール。

インストールが完了したら、TortoiseGitの設定をします。

設定画面を開き、キャプチャ

 

マージツールの項目を選択。

外部を選択してから、P4Mergeのパスを設定します。

これで、設定は完了です。

git diffで違うブランチのファイル、または違う名前のファイルを比較する

同一リビジョンで違うファイルを比較する

違うブランチのファイルを比較する

同一名称でブランチ間比較

CentOS 5.9 で git をインストールする

CentOS 5.9 には、標準状態ではyumでgitをインストール出来ない模様。

なので、RPMforgeを使ってyumにリポジトリを追加してからgitをインストールして見ます。

http://repoforge.org/use/
このページを参考に、該当のrpmファイルをダウンロードします。

ダウンロードしたパッケージファイルをインストールします。

yumで検索してみます。

見つかったので、yumでgitをインストールします。

git logで、コミット毎の差分の内容を検索する

コミットで、productionというキーワードを含んだ追加・削除・変更が行われたログの一覧を取得

master..branch間のコミットで、productionというキーワードを含んだ追加・削除・変更が行われたログの一覧を取得

app/controllers/application_controller.rbのファイルに対する追加・削除・変更で、productionというキーワードを含んだログの一覧を取得

git for Windowsで、エディタを付属のviに変えてエンコードをUTF-8にして見る

git for Windows で、外部のエディタを使うのも良いですが、たまにはviも使ってみましょう。

と言うことで

とgitのコンフィグを設定してあげるだけで、コミットログの編集にviを使う事が出来ます。

git for WindowsをCygwinに変えてみた

昔からWindows上でUnixのコマンドを扱える環境として

Cygwinがありました。

当時というか、ちょっと前まで、レジストリに何か設定を残したりしてて

うれしくない、ということで、最近はマシンスペックも高くなってきていたので

VMでUbuntuを使うようになっていました。

けど、Windows上でもgitコマンドが使いたい、と言うことで

git for Windowsというのを使ってました。

これはまぁCygwinのgitコマンドと周辺コマンドのみをパッケージングしたような物で

lessが使えたり、まぁgitを中心とした極小Unixという感じの物でした。

色々使っていると、やはり色々とUnixコマンドで済ませたくなってくる物で

最近ではちょっと物足りなくなってきてたので、Cygwin再度入れてみるか~と思ったところ

Cygwinは1.7あたりからレジストリを使わなくなったっぽいのです。

きれいな環境のまま使えそう!と言うことで

入れちゃいました。

メインの用途はgit用なので

Cygwin Terminal2

gitはインストールするように設定します。

次に、git用に設定をしていきます。

まず、CygwinのUTF8の設定を。

Cygwin Terminalというのは、Cygwin用のターミナルで、このオプションである程度設定が出来ます。

今までは、Windowsのコマンドプロンプトにbashとかが起動してたような気がしたんだけど…

Cygwin Terminal

textという項目で、Fontを日本語が表示できるフォントに変更します。

続いて、Localeをja.JPにします。

CharacterSetをUTF-8にします。

これで、日本語は表示されるようです。

gitのログも問題ありませんでした。

続いて、gitのコンフィグを。

これで最低限の設定は完了しました。

ついでに、ツリー上のログを表示するエイリアスとかも設定しておきます。

gitコマンドとオプションのオートコンプリート機能も欲しいので、設定してみます。

先ほど使ったCygwinのインストールで、パッケージを追加インストールします。

git-completionというパッケージ。

これを入れることでgitのオプションなどがタブキーで補完されるようになります。

あと、gitリポジトリにいる時に、プロンプトにカレントのブランチ名を表示したいな(git for WIndowsみたいな感じ)

ということで

.bashrcに設定を追加します。

以上です。

これで、gitのリポジトリに入ると、そのリポジトリ内のカレントブランチがプロンプトに表示されるようになります。

git for windowsで秀丸を使ってコミットメッセージを編集したい

git for windowsは、まだ完成とは言い切れない(日本語環境で使うには)というイメージがあり

実際にコミットメッセージをコマンドラインで入力する方法でコミットすると

他の環境ではそのコミットメッセージが化けて見えたりします。

ということで、化ける原因を解消したいので

エディタを別のものに変えてみます。

gitには設定でエディタを変えるという事が出来るようになっているので

その設定を変更してみます。

git help configの中にあるように

という設定項目を変えることでエディタを変更することが出来るようだ

ついでなので、普段使いなれているエディタ(秀丸)を指定したい。

git bashを使う場合、プログラムのパスが若干書き方が違うので

git bash上で秀丸のディレクトリまでたどってみる。

という感じのパスになっただろうか。

ここに秀丸本体のファイル名を付け加えて

となる

実際にgit bash上で起動してみる

起動しただろうか。

続いて、文字化け対策。

通常起動の場合、秀丸はshift-jisで起動してしまう。

秀丸の起動オプションには/fu8というUTF-8で起動するというオプションがあるので

このオプションをつけてみる。

実際にcore.editorに設定してみます。

というファイルがありますでしょうか。

このファイルを開いて

という設定を追加します。

以上で、

とやった時に秀丸が起動するようになります。

gitのログコマンドでツリー状で表示させる

git logでツリー状の良い感じの表示を実現するコマンドオプションをエイリアスに登録する。

gitで、リモートのブランチを誰かが消したにも関わらず、git branch -r をすると表示されしまう。(remote ref does not exist)

複数人でgitリポジトリを管理しており、ほかの誰かがリモート上のあるブランチを削除した場合

ローカルリポジトリ上で

とやると、消されたはずのブランチが出てきてしまう。

さらに、ここで

とやってみても

という感じでエラーが出てしまう。

こんな時は

というコマンドをたたいてやると、リモートの状態を再度取得してくれる。

ちなみに、pruneというのは取り除く、とか切り取る、とかそんな雰囲気の単語らしいので

リモート上で削除されたブランチをローカルからも取り除く、といった意味合いかな?と思います。

git svn fetchをする時、svn上の編集者情報をgit上で意味のある編集者情報としてfetchしたい

git svn fetchを実行すると、そのままsvn上で登録されている編集者情報が取り込まれます。

gendosu <gendosu@f6c38acf-3242-4c98-89c5-1a79c4400658>

のように。

svn上ではgendosuで入っているわけですね。

これのメールアドレスの所に、正式なアドレスを入れてあげたい

そして、名前の所も別の物を入れてあげたい

と言うことで、適当な所にsvnauthersというファイルを作ります。

ファイル名は適当で良いです。

これを、gitのグローバル設定に入れます。

とでもしておきます。

これでgit svn fetchとやると、svnauthersファイルを参照してユーザ情報を書き換えてくれます。

Aptana Studio 3でEGitを入れているのに、Aptana Studio 3でインストールされるPortableGitが優先されてしまう問題

Aptana Studio 3でEGitを入れているのに
Aptana Studio 3でインストールされるPortableGitが優先されてしまう問題

ですが

Preferencesの設定の中にある

[Term] – [Git]

という所が二つあると思います。

これは、Aptana Studio 3が内包しているPortable Gitの設定と、EGitの設定が両方出てきているという事です。

で、EGitの方を優先で使いたい場合ですが

[Term] – [Git]のサブオプションがある方がEGitで、サブオプションがない方がPortableGitの方になります。

このPortableGit側の設定の
「Automatically attach our git support to projects added that have git repositories」
と言う設定をOFFにする事で解決する事が出来ます。preference

UbuntuにRhodeCodeを入れてGitリポジトリを公開する

RhodeCodeというのは、

Githubのような雰囲気のソース共有サーバを構築するオープンソースです。

Githubでやりたい事を、Githubではなく、ローカルで実現したい、といった場合に適していると思います。

リポジトリをフォークしたり、ソースレビューをしたりetc

と言うことで、

RhodeCodeをインストールして見ます。

RhodeCodeはPython製なので、Pythonをインストールします。

sudo apt-get install python-dev python-setuptools

RhodeCodeのデフォルトのソース管理がMarcurialなので、入れておきます。

sudo apt-get install mercurial

Gitクライアントも入れておきます。

sudo apt-get install git

リポジトリ保存用のディレクトリ、プログラムディレクトリなどをあらかじめ作成します。

cd /var

sudo mkdir rhodecode
cd rhodecode
sudo mkdir rhodecode
sudo mkdir repositories

実行ユーザを作成します

sudo adduser rhodecode –disabled-password
sudo chown -R rhodecode:rhodecode /var/rhodecode

RhodeCodeのインストール

sudo easy_install rhodecode

RhodeCodeのセットアップ
以下が参考
http://packages.python.org/RhodeCode/setup.html#setup

RhodeCodeの設定ファイル作成

cd /var/rhodecode/rhodecode
paster make-config RhodeCode production.ini

production.iniファイルを開き、hostに実際のIPアドレスを設定

paster setup-rhodecode production.ini \
–user=admin \
–password=admin \
–email=gendosu@gendosu.jp \
–repos=/var/rhodecode/repositories

RhodeCodeの起動確認

paster serve production.ini

RhodeCode用のinit.dスクリプトを追加

https://secure.rhodecode.org/rhodecode/files/beta/init.d
に登録されている、「rhodecode-daemon2」を参考にする

パス情報などが環境にマッチしないと思うので、その辺を修正する。

修正後のファイルの中身

#!/bin/sh -e
########################################
#### THIS IS A DEBIAN INIT.D SCRIPT ####
########################################

### BEGIN INIT INFO
# Provides: rhodecode
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts instance of rhodecode
# Description: starts instance of rhodecode using start-stop-daemon
### END INIT INFO

APP_NAME=”rhodecode”
APP_PATH=”/var/gendosu/$APP_NAME”

CONF_NAME=”production.ini”

PID_PATH=”$APP_PATH/$APP_NAME.pid”
LOG_PATH=”$APP_PATH/$APP_NAME.log”

PYTHON_PATH=”/usr/local”

RUN_AS=”hoge”

DAEMON=”$PYTHON_PATH/bin/paster”

DAEMON_OPTS=”serve –daemon \
–user=$RUN_AS \
–group=$RUN_AS \
–pid-file=$PID_PATH \
–log-file=$LOG_PATH $APP_PATH/$CONF_NAME”

start() {
echo “Starting $APP_NAME”
PYTHON_EGG_CACHE=”/tmp” start-stop-daemon -d $APP_PATH \
–start –quiet \
–pidfile $PID_PATH \
–user $RUN_AS \
–exec $DAEMON — $DAEMON_OPTS
}

stop() {
echo “Stopping $APP_NAME”
start-stop-daemon -d $APP_PATH \
–stop –quiet \
–pidfile $PID_PATH || echo “$APP_NAME – Not running!”

if [ -f $PID_PATH ]; then
rm $PID_PATH
fi
}

case “$1” in
start)
start
;;
stop)
stop
;;
restart)
echo “Restarting $APP_NAME”
### stop ###
stop
wait
### start ###
start
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac

svnのリポジトリを全部gitに移行する

svnのリポジトリをgitで扱う方法として
svn gitというコマンドツールがある

今回はgitをリモートリポジトリにする方法は別途解説するとして

このコマンドを使用して、svnリポジトリをgitに移行してみます。

まずは、gitリポジトリをイニシャライズします。

イニシャライズ時に、リモートリポジトリにする前提で移行するので–bareオプションを付けます。
これは、my_prodディレクトリにソースを展開せずに管理情報だけを保持するリポジトリにするオプションです。
[shell]git init –bare my_prod[/shell]

svnへの参照情報をconfigファイルに設定します。

[shell]cd .git
vi config[/shell]
以下の内容を追記
[text][svn-remote "svn"]
url = http://localhost/svn/my_prod
fetch = trunk:refs/heads/master
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*[/text]

  • urlというのは、SVNリポジトリのベースになるURLですが、個々のリポジトリ名まで含んで問題ないみたい。
    このURIに/trunkとか/branchesとかをくっつけられる状態であればいいようです。
  • fetchというのは、マスターを指定する部分です。
    が、マルチマスター構成も可能で、ここは複数行書くことが出来ます。
    その際は、refs/heads/sub-musterとかをフェッチ先に指定する様にします。
  • branchesは、ブランチ配下を取り込むという指定です。
    ここの書き方としては「*」をかならず含まなければいけないようです。
    で、ブランチ名によるフィルタリングをして取り込みたいブランチだけを指定することも可能。
    branches/release_*:refs/head/branches/release_*
    という感じに。
  • tagsも同様です。

svnからリポジトリを取得

[shell]git svn fetch[/shell]
これで、http://localhost/svn/my_prodにあるtrunk、branches以下のすべて、tags以下のすべての情報がgitに取り込まれます。

このgitリポジトリをサーバとして公開すれば、svnからgitへの移行が完了となります。

Ubuntu 12でgitoliteを使ってgitリポジトリを公開する

公開リポジトリを作成するまで

gitのインストール
[shell]sudo apt-get install git[/shell]
gitoliteのインストール
[shell]sudo apt-get install gitolite[/shell]
gitolite用アカウントの作成
[shell]sudo adduser –disabled-password gitolite[/shell]
管理者用として公開鍵を作成
[shell]ssh-keygen -t rsa[/shell]
gitoliteアカウントのホームに転送

sudo cp .ssh/id_rsa.pub /home/gitolite/admin.pub

gitoliteアカウントにログインし、gitolite環境をセットアップ
[shell]sudo su – gitolite
gl-setup admin.pub
exit[/shell]
gitolite用の管理リポジトリをcloneする
[shell]git clone gitolite@localhost:gitolite-admin[/shell]
リポジトリを新規作成する

gitolite/conf/gitolite.conf ファイルに以下の内容を追記
[shell]repo hoge
RW+ = admin[/shell]
変更をpushする
[shell]git commit -m "add repo"
git push[/shell]
これで、hogeリポジトリが作成され、adminがアクセス出来るようになる

別のマシンからcloneする場合、ssh-keygenの部分からやれば良い

ユーザの追加は

gitolite-admin/keydirに作成した公開鍵の名前で作成される

win-gendosu.pub

とやれば、

gitolite-admin/conf/gitolite.conf

で設定するユーザは

win-gendosuとなる。

先のhogeにwin-gendosuの権限も付け加えると
[shell]repo hoge
  RW+ = admin win-gendos[/shell]
となる

gitoliteからcloneする

gitoliteからリポジトリをクローンするには

Linux系の場合
[shell]ssh-keygen -t rsa[/shell]
でキーを作成する

id_rsa.pubを適当な名前でコピーする
例)gendosu-ubuntu.pub

gitoliteのサーバにsftpなどで送り込んで

gitolite-admin/keydirに格納する

gitolite-adminリポジトリをコミットして、プッシュ

これで、gitoliteへ公開鍵を設定完了
[shell]ssh gitolite@サーバ名[/shell]
とやると、gitoliteがメッセージを返してくれるはず

この状態で
[shell]git clone gitolite@[サーバ名]:[リポジトリ名][/shell]
とすると、クローンが作成される

Windows系

環境変数にHOMEという項目を作成して

c:\users\[自分のアカウント名]

を登録する。
要は自分のホームを指定する。

gitを扱う手っ取り早い方法

githubのWindowsクライアントをとりあえずインストールする

ターミナルでgitコマンドが使えるようになるので、そこで
[shell]ssh-keygen -t rsa[/shell]
を実行

c:\users\[自分のアカウント名]\.sshに

id_rsa.pubが出来ていると思うので、適当な名前(クライアントマシン名etc)でコピーする
例)gendosu-win.pub

それをpscpやwinscpなどで、gitoliteのサーバに送り込む

gitolite-admin/keydirに格納する

gitolite-adminをコミット、プッシュする

win側で

c:\users\[自分のアカウント名]\.ssh\configファイルを作成し
以下を追加
[shell]host gitolite
    user gitolite
    hostname 192.168.1.10 #サーバのIPかホスト名
    port 22
    identityfile ~/.ssh/id_rsa[/shell]
コマンドプロンプトで
[shell]ssh gitolite[/shell]
とやると、gitoliteがメッセージを返してくれるはず

gitクローンは
[shell]git clone ssh://gitolite/[リポジトリ名][/shell]
とやる

svnのリポジトリからgit cloneするには

たとえば、svnのリポジトリhttp://server/svn/trunk/repoをgitで扱いたい場合、
[shell]git svn clone http://server/svn/trunk/repo[/shell]
とやれば、svnのリポジトリをgitとして扱うことが出来ます。

gitでtagやbranchなども使ってsvnリポジトリを扱いたい場合
[shell]git svn clone -s http://server/svn/trunk/repo[/shell]
とすれば、ブランチやタグの情報も取得出来るようになります。

ただし、

http://server/svn/trunk/repo
http://server/svn/branches
http://server/svn/tags

という構成になっていないと
よろしくやってくれないようです。

通常と違う構成でsvnを使っている場合、-sオプションでは無く
[shell]git svn clone –trunk=<trunkのパス> –tags=<タグのパス> –branches=<ブランチのパス> <リポジトリURL>[/shell]
というオプションでそれぞれのパスを指定すれば、よろしくやってくれるようです。

git svn cloneしたローカルリポジトリには、通常通りgit commitなどで作業が出来ます。

ただし、svnリポジトリにpushする時には
[shell]git svn dcommit[/shell]
を使用します。

そして、svnリポジトリから更新を取得するには
[shell]git svn rebase[/shell]
を使用します。

svn上のブランチの一覧を取得するには
[shell]git svn branch -r[/shell]
ブランチに対して作業する場合
[shell]git branch local-my_repo my_repo[/shell]
とすることで、my_repoブランチを手元のローカルブランチに作成する

さらに、そのローカルブランチをチェックアウト
[shell]git checkout local-my_repo[/shell]
あとは作業してコミットしたり

pushは、先ほどと同様に
[shell]git svn dcommit[/shell]
ブランチの作業が終了すれば
[shell]git checkout master
git branch -d local-my_repo[/shell]
とすれば良い

タグも同様