query: tag:svn

git svnを使っていると、何度conflictを解決しても SVNに
"Your file or directory '***' is probably out-of-date"
と冷たく拒まれることがあります。
これを解決するには、XXXXにSVNのHEADに相当するコミットハッシュを指定して以下を実行します。

pre>>
% git checkout -b merging
% git checkout trunk
% git reset --hard
% git svn fetch
% git rebase trunk merging # コンフリクトするので解決してコミット
% git checkout -b merging2
% git checkout trunk
% git merge merging2
% git svn dcommit
<<--

結構面倒です。git-svnが賢くなってくれることに期待します。

posted by genki genki on Thu 15 Apr 2010 at 03:14 with 0 comments

git svn rebaseを行って conflict が発生した場合、
(no branch) になってしまいます。

この場合、手動でconflictを解決してcommitしたあと、

pre>>
% git log -1 --pretty=oneline
<<--

でコミットのハッシュを確認し、git checkoutでmerge先のブランチに
移動してから git merge <commit hash> すればokのようです。

posted by genki genki on Wed 14 Apr 2010 at 08:16 with 2 comments

git svnを以下のような構成で使っていた時に、git svnのリモートトラッキングブランチのpointerがtrunkに代わってしまい、いつのまにかブランチにcommitしたつもりのものがtrunkにcommitされるという事があり、困りました。

ss

gitから.gitにpushしたものを git-svnからpullしたタイミングで発生するようです。
解決策としては、git-svnでgit pullをせずに、

pre>>
% git fetch remote-name
% git merge --no-ff remote-name/branch-name
% git svn dcommit
<<--

でok. アクシデンシャルなdcommitを防ぐには、--dry-runが便利です。

posted by genki genki on Fri 5 Mar 2010 at 11:16 with 1 comment

git-svnを使っていて、git svn dommitするときに、
掲題のようなエラーメッセージが出た場合、リモートリポジトリとローカルリポジトリのトラッキングブランチの同期が取れていない事が原因かもしれません。

例えば、SVNリポジトリ上で削除されているブランチが、ローカルのgitリポジトリに残ってしまっている場合、以下のようにリモートトラッキングブランチを削除する事で問題を解決できる可能性があります。

pre>>
% git branch -D -r
<<--

posted by genki genki on Fri 5 Mar 2010 at 02:38 with 0 comments

しばらく前にインストールしていた git-1.6.0.4 には無かった機能なのですが、最近のGit (1.6.4.4で確認) には git svn branch というSVNリポジトリのブランチを作成する機能がついているようです。

pre>>
% git svn branch
<<--

これで指定したbranchがリモートで作成されます。
あとは、こんな感じでリモートトラッキングブランチをチェックアウトすればOK.

pre>>
% git checkout -b --track
<<--

便利ですね。

posted by genki genki on Tue 8 Dec 2009 at 07:38 with 2 comments

subversionをソースからビルドする場合、デフォルトのconfigurationではSSLが有効化されません。SSLが使えるようにするには、neonとsubversionの双方を--with-sslオプションをつけてビルドする必要があります。

neon
pre>>
./configure --with-ssl
make
make install
<<--

subversion
pre>>
./configure --with-ssl
make
make install
<<--

posted by genki genki on Mon 7 Dec 2009 at 04:05 with 0 comments
posted by genki genki on Mon 9 Feb 2009 at 11:05 with 0 comments

参考:http://blog.livedoor.jp/farend/archives/609528.html

Mac OS X用のNetBeans 6.5でSubversionにコミットするとき、ログメッセージに日本語が含まれていると下記のエラーが表示されて失敗します。

Commit failed (details follow):
Can't convert string from native encoding to 'UTF-8':

~/.subversion/config に下記の設定を追加してNetBeansを再起動すると、ログメッセージに日本語を使っても問題なくコミットできるようになります。

log-encoding = utf8

posted by ysakaki ysakaki on Wed 31 Dec 2008 at 03:24 with 0 comments

cloneしようとしたら、下記のエラーが出て失敗します。何度retryしても、VMWareのNATサービス再起動してもだめ。

shell>>
RA layer request failed: REPORT request failed on '/!svn/vcc/default': REPORT of '/!svn/vcc/default': Could not read response body: Secure connection truncated (https://svn.s21g.com) at /usr/local/bin/git-svn line 3833
<<--

ぐぐっても情報が乏しいのでわかりませんが、大量のログがあるcloneだとエラーになる気がします。

Make sure your connection did not timeout. This is usually a client side connection problem.
https://dev.openwrt.org/cgi-bin/trac.fcgi/ticket/3563

###リビジョン番号を取得
s21gではsvnを使っています。
shell>>
svn log https://svn.s21g.com/blog/trunk | head -n 10
<<--

###リビジョンを指定してclone
すぐにclone完了しました!
shell>>
git svn clone https://svn.s21g.com/blog/trunk blog.git -r 1798
Checking out files: 100% (1632/1632), done.
Checked out HEAD:
https://svn.s21g.com/blog/trunk r1798
<<--

posted by satoko satoko on Mon 4 Aug 2008 at 17:16 with 0 comments

SVNリポジトリ上に存在する複数のブランチやtrunkの間で、
変更点をマージしたりする方法のメモです。

まず、これからSVNリポジトリをgit svn cloneすると言う場合は、以下のような
オプションを指定して実行します。

pre>>
git-svn clone http://svn.repos.com/foo -T trunk -b branches -t tags
<<--

これで、SVNリポジトリ上のtrunk, branches, tagsをGitのbranchとして全て取り込んだ状態でcloneが実行されます。

git-svnでcloneした既存のWorking copyが手元にあって、
そこに別なbranchやtrunkを追加したい場合は、以下のように.git/config
ファイルに項目を加えます。

pre>>
[svn-remote "svn"]
url = http://svn.repos.com/foo/branches/bar
fetch = :refs/remotes/git-svn
[svn-remote "trunk"]
url = http://svn.repos.com/foo/trunk
fetch = :refs/remotes/git-svn-trunk
<<--

下の方が今回追加したものです。
あとは、以下のコマンドを実行してSVNからfetchしてきます。

pre>>
% git svn fetch trunk
<<--

そうすると、以下のようなブランチが作成されます。

pre>>
% git branch -r
git-svn
git-svn-trunk
<<--

ここから先は、普通にGitのbranchとしてmergeすればOKです。

** See Also **

posted by genki genki on Fri 13 Jun 2008 at 15:22 with 0 comments

Zsh用のgit-svnサブコマンド補完関数を書いてみました。

pre>>
_git-svn () {
git-svn --help | grep "^ \w" | sed "s/^ //" | sed "s/ .*//" | sed 's/^/ compadd /'
}

compdef _git-svn git-svn
<<--

git-svn [TAB]でも、git svn [TAB]でも、どちらでも補完できます。

posted by genki genki on Wed 28 May 2008 at 20:30 with 1 comment

瀧内さんの記事を参考にgit-svn使い始めましたが便利です。svnだと1コミットに複数の修正(バグ修正、機能追加、type修正など)をつい入れてしまうのですが、gitだとそういうこともなくなります。なのでcommitメッセージが書きやすい。

###Rails向けgit環境設定
shell>>
$git svn clone svn-repo-URL
$git add log
$git add tmp
$touch tmp/.gitignore log/.gitignore .gitignore
<<--

Rails_ROOT直下の.gitignore:最後の2行はemacs用
(tmpやlogの下の.gitignoreは空ファイルでOKです)
shell>>

.gitignore

log/.log
tmp/**/

~
#
#
<<--

###git stash:へそくり
何かの修正をすでに加えている最中に、typoや緊急の修正分だけをコミットしたくなったとき。
(修正として新たに追加したファイルはstashしてもgit-status中に出てきますが、dcommitは可能です)
shell>>
$git stash save
edit edit
$git commit -a -m "fixed typo"
$git svn dcommit
$git stash apply
<<--

###svn revert:ファイル一個だけ編集前のものに戻す
shell>>
$git checkout -- filename
<<--

###その外よく使うコマンド
shell>>
$git diff
$git diff filename
$git add filename
$git add .
$git status
$git rm -f filename
<<--

###Refs
http://blog.s21g.com/articles/583
http://coderepos.org/share/wiki/FAQ/Git
http://railscasts.com/episodes/96:railscasts Git on Rails

posted by satoko satoko on Wed 28 May 2008 at 06:42 with 1 comment

既存のSVNリポジトリを使いつつ、ローカルではGitの利便性を享受するために、
git-svnを使う方法のメモです。以下はopenid-fuのリポジトリを使った例です。

  1. まずは普通にSVNリポジトリにファイルをimportしておきます。既存のものがある場合はそれを使います。
  2. git-svnでリポジトリをcloneします。
    pre>>
    % git svn clone https://svn.s21g.com/public/openid-fu/ openid-fu
    <<--
    これでopenid-fu/にクローンされました。
  3. ファイルの変更などをSVNにコミットする場合は、
    普通にGitを使うように、git addでGit管理下に置き、git commitします。
    そのあと、
    pre>>
    % git svn dcommit
    <<--
    すると、SVNにコミットされます。
  4. SVN上の変更は、git svn rebaseする事でローカルに反映されます。
    svn upに相当する感じですね。

追記

SVN::Core.pmがない、などといわれる場合は、libsvn-perl
入れる必要があるようです。

posted by genki genki on Sun 18 May 2008 at 04:56 with 0 comments

svn upしたあとにどのファイルが更新されるかを事前にしらべるには、
以下のようなコマンドを使えば良いようです。

pre>>
% svn -u stat
<<--

svn up -dry-runが出来ると良いんですけどね。

See Also

posted by genki genki on Mon 12 May 2008 at 12:45 with 0 comments

###結論:svn/dav, svn/dbの権限変更が必要
下記の二つのDIRにapacheを動かしているユーザにオーナー権限を与えます
/usr/local/svn/dav #activity databaseというものらしい
/usr/local/svn/db #transactionログなどか

shell>>

chown www-data:www-data -R /usr/local/svn/db

chown www-data:www-data -R /usr/local/svn/dav

<<--

###エラーの内容など
shell>>
$svn ci -m "test"
svn: Commit failed (details follow):
svn: Can't create directory '/usr/local/svn/db/transactions/1128-1.txn': Permission denied
<<--

→ chown www-data:www-data -R /usr/local/svn/db

shell>>
$svn ci -m "test"
svn: Commit failed (details follow):
svn: Can't open activity db: APR does not understand this error code
<<--

→ chown www-data:www-data -R /usr/local/svn/dav

###Refs
http://svn.haxx.se/users/archive-2005-10/0084.shtml
http://svn.haxx.se/users/archive-2004-02/1350.shtml

posted by satoko satoko on Thu 17 Apr 2008 at 15:58 with 0 comments

複数人で開発している場合に、新しく作成したファイルを
svn addし忘れて、Commitもれを発生させてしまうと、
テストが走らなかったり、開発を止めてしまったりと、
様々な悪影響が発生してしまいます。

今回は、Commitもれを防ぐために僕が使ってる方法を紹介します。

やってることは単純で、以下のalias設定を.zshrcに登録しています。

shell>>
alias svn_new='svn stat | grep "^?" | sed "s/? tmp.//" | sed "s/? log.//" | grep .'
<<--

svn statの結果から、log/とtmp/ディレクトリの中身を除外してるだけですね。
あとは、svn_newコマンドを実行すれば、svn add
し忘れてるファイルが無いかどうか簡単に確認できます。

しかし、実際にはconfig/database.ymltagsファイルなど、
svn addする必要が無いファイルがだんだん増えてくるので、
そのような場合には適切にsvn:ignoreプロパティを設定していきます。

僕は、手間を省くために、以下のようなzsh関数を作って使っています。

~/.zshrc

shell>>
svn_ignore () {
svn pset svn:ignore -F <(echo $1 && svn pget svn:ignore | sed '/^$/d') $2
}
<<--

使い方はこんな感じです。

shell>>
% svn_ignore something_new_file ./
<<--

svn:ignoreに設定されたファイルは、svn_newに出てこなくなります。

更新履歴

  • 2007/12/14 CometのやりすぎでComitになっていたのでCommitに訂正。
posted by genki genki on Thu 13 Dec 2007 at 12:45 with 0 comments

chcpコマンド。
subversionのコンソールクライアントをインストールしたのですが、svn helpなどが文字化け。emacsのshellで入力すると正しく表示されるので、どうやらコードページが正しくない模様。

chcp 65001でUTF-8に変換できます。これで文字化けしなくなりました。

  • 65001 UTF-8
  • 932 Shift-jis

via
http://d.hatena.ne.jp/tasukuchan/20070511/1178876977
http://d.hatena.ne.jp/s0u/20070307/1173282301

posted by satoko satoko on Thu 13 Dec 2007 at 11:42 with 0 comments