<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>UKSTUDIO &#187; git</title>
	<atom:link href="http://ukstudio.jp/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://ukstudio.jp</link>
	<description>いわゆる86世代のブログです</description>
	<lastBuildDate>Wed, 11 Jan 2012 05:53:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<div id='fb-root'></div>
					<script type='text/javascript'>
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>Better Subversionとしてのgit-svn</title>
		<link>http://ukstudio.jp/2010/09/13/git-svn/</link>
		<comments>http://ukstudio.jp/2010/09/13/git-svn/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 08:11:17 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://ukstudio.jp/?p=696</guid>
		<description><![CDATA[普段のプログラミングにgitを使用しているのだけど、実際の現場ではまだまだsvnが主流だったりする。svnを直接使ってもいいのだけど、やはりローカル上でコミットしたいとか、複数のコミットを1つにまとめたいとか、トピックブランチを切りたいとかあるのでそれはsvn単体だと厳しい。そんなわけでBetter SVNとしてのgit svnの紹介、と言うよりメモ。 リポジトリのクローン git svn clone repository_url これでsvnリポジトリをgitリポジトリとして取得できる。大きめのリポジトリだと結構時間がかかるのでのんびりと。svnリポジトリの構成がtrunk/branches/tagsという一般的な構成であればオプション-を付けるのがおすすめ。trunkをmaster、branches/tagsをremote branchとして扱うようになる。個別に指定する方法もあるのでhelp参照。 git svn clone -s repository_url リポジトリの更新 git svn rebase svn upに相当する。remote brancheのtrunkをgit coしてそれをmergeする方法もあるけど、基本はこれで問題ない。 リポジトリへのコミット git svn dcommit これはsvn ciに相当するって言うと、少し違う気もするのだけどsvnリポジトリにコミットするっていう意味だと同じ。git pushの方がイメージに近い。ローカルにたまっているコミットをsvnリポジトリにpushする感じ。ローカルにコミットされていない変更があるとdcommitできないので、その時はgit stashする。 git stash git svn dcommit git pop ブランチの作成 git svn branch name trunk-masterでやり取りするだけだったら、上記さえ覚えておけば後は普通のgitリポジトリと同じ。gitのブランチを作るのは通常のgitリポジトリと同じだけど、svnのブランチを作るにはこのコマンドを叩く。この時点でsvnリポジトリにコミットされるので注意(&#8211;dry-runオプションはある)。-mオプションでコミットメッセージを書ける。指定しない場合は「Create branch name」となる。 svnリポジトリの別のブランチや、ローカルのgitリポジトリのブランチから新しくブランチを作る場合には後ろに名前を指定する。 git svn branch name remotes/branch git svn branch [...]]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2010/09/13/git-svn/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>普段のプログラミングにgitを使用しているのだけど、実際の現場ではまだまだsvnが主流だったりする。svnを直接使ってもいいのだけど、やはりローカル上でコミットしたいとか、複数のコミットを1つにまとめたいとか、トピックブランチを切りたいとかあるのでそれはsvn単体だと厳しい。そんなわけでBetter SVNとしてのgit svnの紹介、と言うよりメモ。</p>
				<h2>リポジトリのクローン</h2>
				<p><code>
				<pre>git svn clone repository_url</pre>
<p></code><br />
これでsvnリポジトリをgitリポジトリとして取得できる。大きめのリポジトリだと結構時間がかかるのでのんびりと。svnリポジトリの構成がtrunk/branches/tagsという一般的な構成であればオプション-を付けるのがおすすめ。trunkをmaster、branches/tagsをremote branchとして扱うようになる。個別に指定する方法もあるのでhelp参照。<br />
<code>
<pre>git svn clone -s repository_url</pre>
				<p></code></p>
				<h2>リポジトリの更新</h2>
				<p><code>
				<pre>git svn rebase</pre>
<p></code><br />
svn upに相当する。remote brancheのtrunkをgit coしてそれをmergeする方法もあるけど、基本はこれで問題ない。</p>
<h2>リポジトリへのコミット</h2>
<p><code>
<pre>git svn dcommit</pre>
				<p></code><br />
				これはsvn ciに相当するって言うと、少し違う気もするのだけどsvnリポジトリにコミットするっていう意味だと同じ。git pushの方がイメージに近い。ローカルにたまっているコミットをsvnリポジトリにpushする感じ。ローカルにコミットされていない変更があるとdcommitできないので、その時はgit stashする。<br />
				<code>
				<pre>git stash
git svn dcommit
git pop
</pre>
				<p></code></p>
				<h2>ブランチの作成</h2>
				<p><code>
				<pre>git svn branch name</pre>
<p></code><br />
trunk-masterでやり取りするだけだったら、上記さえ覚えておけば後は普通のgitリポジトリと同じ。gitのブランチを作るのは通常のgitリポジトリと同じだけど、svnのブランチを作るにはこのコマンドを叩く。この時点でsvnリポジトリにコミットされるので注意(&#8211;dry-runオプションはある)。-mオプションでコミットメッセージを書ける。指定しない場合は「Create branch name」となる。</p>
<p>svnリポジトリの別のブランチや、ローカルのgitリポジトリのブランチから新しくブランチを作る場合には後ろに名前を指定する。<br />
<code>
<pre>git svn branch name remotes/branch
git svn branch name local_branch</pre>
				<p></code></p>
				<h2>ブランチのチェックアウト</h2>
				<p><code>
				<pre>git co -b branch remotes/branch</pre>
<p></code><br />
svn switchに相当。git svnはsvnのbranches/tagsをremote branchとして扱うのでそれをgit coすればいい。これは上記のgit svn branchで作成したものも同じ。</p>
<h2>ブランチ間のマージ</h2>
<p><code>
<pre>git merge --no-ff branch_name
git svn dcommit</pre>
				<p></code><br />
				マージは通常のgitとほぼ同じ。注意しなくてはいけないのは&#8211;no-ffが必要なこと(参考: <a href='http://webtech-walker.com/archive/2010/03/26101332.html'>http://webtech-walker.com/archive/2010/03/26101332.html</a>)。</p>
				<h2>ブランチの削除</h2>
				<p><code>
				<pre>svn rm branches/name #svnリポジトリをcoしてそこで
git branch -r -d name #git-svnのgitリポジトリ上で</pre>
				<p></code><br />
				現時点(v1.7.0.6)ではsvnリポジトリのブランチを削除するコマンドは用意されていない模様。なので直接svn上でブランチを消して、git側のremote branchも直接消すしかないと思う。</p>
				<h2>どのブランチにコミットされるのか</h2>
				<p><code>
				<pre>git svn info</pre>
<p></code><br />
もしかしたら、今いるgitリポジトリのブランチでgit svn dcommitしたらsvnリポジトリのどのブランチにコミットされるのかがわからなくなることもあるかもしれない。その時はgit svn infoで表示されるURLをみればよい。</p>
<h2>ignoreの設定</h2>
<p><code>
<pre>git svn create-ignore</pre>
				<p></code><br />
				ignoreは少しややこしいんだけど、svn側とgit側の2つ存在する。このコマンドはsvn側のignore設定を.gitignoreとして出力する。ちなみにsvn側のみignore設定してある場合、当然git側ではignoreされずgit svn dcommit出来てしまう。その場合、svn側のignoreも無視して通常通りコミットされてしまうので注意。</p>
				<h2>まとめ</h2>
				<p>git-svnでの開発はsvnの面倒なところをカバーしてくれたりするので非常にオススメ。もちろん全てがgit-svnで出来るわけでもないので、その辺は諦めて直接svnを使う必要もある。ある意味、最悪わからなくなったらいつでもsvnに戻ればいいのでとりあえず試してみるといいと思う。</p>
				<p>ちなみにgitに詳しくない人は濱野さんの入門Gitがおすすめです。</p>
				<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=ukstudio0c-22&#038;o=9&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=1X69VDGQCMF7Z30FM082&#038;asins=4798023809" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2010/09/13/git-svn/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2010/09/13/git-svn/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ukstudio.jpをgitで管理するようにしてみた</title>
		<link>http://ukstudio.jp/2008/07/27/ukstudio_controlled_git/</link>
		<comments>http://ukstudio.jp/2008/07/27/ukstudio_controlled_git/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 15:17:27 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[slicehost]]></category>

		<guid isPermaLink="false">http://ukstudio.jp/?p=143</guid>
		<description><![CDATA[最近流行りのgitを使ってみようかなーってことでとりあえずukstudio.jpを全部gitで管理するようにした。 最終的に以下のような構成になった。 MacBookにgitをインストールする MacBookにgitをインストールするのは簡単だった。MacPortsですんなり入った。 参考: MacPortsを使ってgitをインストールしてみた &#8211; Post-itみたいな サーバにgitをインストールする サーバはslicehostのCentOS5.1を使用。インストールされてるsvnが1.4なのでこちらは一旦remove。 $ yum remove subversion gitはyumの標準リポジトリでは管理されてないので、外部リポジトリ(DAG)を登録してそこからインストールした。 $ wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-$0.3.6-1.el5.rf.i386.rpm $ rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm $ yum install git リポジトリを作る とりあえずコミットする人の名前とメールアドレスを登録しないといけないらしいので登録。これはサーバの方も同じ。 $ git config --global user.email yuki.0w0[at]gmail.com $ git config --global user.name YukiAkamatsu 次にローカルのファイル群をcommitする。 $ cd ~/ukstudio.jp $ git init $ git add . $ git commit -m [...]]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2008/07/27/ukstudio_controlled_git/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>最近流行りのgitを使ってみようかなーってことでとりあえずukstudio.jpを全部gitで管理するようにした。</p>
				<p>最終的に以下のような構成になった。</p>
				<p><a href="http://ukstudio.jp/wp-content/uploads/2008/07/git-ukstudio.png"><img src="http://ukstudio.jp/wp-content/uploads/2008/07/git-ukstudio.png" alt="" title="git-ukstudio" width="284" height="284" class="alignnone size-medium wp-image-145" /></a></p>
				<h2>MacBookにgitをインストールする</h2>
				<p>MacBookにgitをインストールするのは簡単だった。MacPortsですんなり入った。</p>
				<p>参考: <a href="http://d.hatena.ne.jp/from_kyushu/20080414/git_on_mac">MacPortsを使ってgitをインストールしてみた &#8211; Post-itみたいな</a></p>
				<h2>サーバにgitをインストールする</h2>
				<p>サーバはslicehostのCentOS5.1を使用。インストールされてるsvnが1.4なのでこちらは一旦remove。</p>
				<pre lang="bash">
$ yum remove subversion
</pre>
				<p>gitはyumの標準リポジトリでは管理されてないので、外部リポジトリ(<a href="http://dag.wieers.com/rpm/">DAG</a>)を登録してそこからインストールした。</p>
				<pre lang="bash">
$ wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-$0.3.6-1.el5.rf.i386.rpm
$ rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
$ yum install git
</pre>
				<h2>リポジトリを作る</h2>
				<p>とりあえずコミットする人の名前とメールアドレスを登録しないといけないらしいので登録。これはサーバの方も同じ。</p>
				<pre lang="bash">
$ git config --global user.email yuki.0w0[at]gmail.com
$ git config --global user.name YukiAkamatsu
</pre>
				<p>次にローカルのファイル群をcommitする。</p>
				<pre lang="bash">
$ cd ~/ukstudio.jp
$ git init
$ git add .
$ git commit -m "first commit"
</pre>
				<p>この状態だとまだローカル内での変更のみ。なので、この変更をサーバ側で受け取れるようにする。</p>
				<pre lang="bash">
# ukstudio.jpにログインした状態
[ukstudio.jp]$ mkdir /var/git/ukstudio.jp
[ukstudio.jp]$ cd /var/git/ukstudio.jp
[ukstudio.jp]$ git init-db
</pre>
				<p>んで、またローカルに戻ってさっきcommitしたのをpushして反映させる。</p>
				<pre lang="bash">
$ git remote add ukstudio.jp ssh://ukstudio@ukstudio.jp/var/git/ukstudio.jp
$ git push ukstudio.jp ukstudio.jp master
</pre>
				<p>最後に外部から見れるように配置する。</p>
				<pre lang="bash">
# ukstudio.jp
[ukstudio.jp]$ cd /var/www/vhost/
[ukstudio.jp]$ git clone /var/git/ukstudio.jp
</pre>
				<p>これで/var/www/vhost/ukstudio.jpが作成されて、そこにずらーっとファイルができてるはず。とりあえずこれでukstudio.jpをgitで管理できるようになった。(と思う)</p>
				<h2>ローカルで変更を加えてみる</h2>
				<p>本当にうまく管理できているのか、適当なファイルを作って確かめてみたいと思う。</p>
				<pre lang="bash">
$ cd ~/ukstudio.jp
$ touch hoge.txt
$ git add hoge.txt
$ git commit -m "commit test"
$ git push ukstudio.jp master

#ukstudio.jp
[ukstudio.jp]$ cd ~/var/www/vhost/ukstudio.jp
[ukstudio.jp]$ git pull
</pre>
				<p>これでhoge.txtがあれば、うまく管理できてることになると思う。</p>
				<p>そんな感じで、とりあえずしばらくはgitを使ってみようかなーと思う。「git log -p」とやるとコミットログがdiff付きでみれて便利。</p>
				<h3>参考</h3>
				<p><a href="http://www8.atwiki.jp/git_jp/pub/Documentation.ja/user-manual.html">Git ユーザマニュアル(1.5.3以降)</a><br />
				<a href="http://www8.atwiki.jp/git_jp/pub/Documentation.ja/tutorial.html">Gitチュートリアル(1.5.1以降)</a><br />
				<a href="http://www.nofuture.tv/index.rb?GitMemo">Gitメモ</a><br />
				<a href="http://blog.champierre.com/archives/670">せっかちな人のためのgit入門</a><br />
				<a href="http://www.kaeruspoon.net/articles/477">バージョン管理をsubversionからgitに移行してみた</a></p>
				<h2>SSHについて補足</h2>
				<p>サーバへのSSH接続は鍵認証でやっています。秘密鍵を~/.ssh/id_dsa_ukstudio.jpで保存して、~/.ssh/configに以下のように書いています。</p>
				<pre lang="bash">
Host ukstudio.jp
IdentityFile ~/.ssh/id_dsa_ukstudio.jp
Protocol 2,1
</pre>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2008/07/27/ukstudio_controlled_git/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2008/07/27/ukstudio_controlled_git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

