最近の更新 | |
---|---|
ドライランのありがたみを改めて知る
| 2024/04/04 |
伊豆半島
| 2024/03/31 |
お出かけチェックリスト
| 2024/03/29 |
Ruby
| 2024/03/27 |
Kubernetes
| 2024/03/22 |
音楽データをDisplayAudioで聞く
| 2024/03/09 |
Redmine
| 2024/02/05 |
git
| 2024/02/02 |
経済
| 2024/01/08 |
どうする家康
| 2023/12/17 |
MX-Linux
| 2023/11/06 |
國體関連学-休学のご連絡
| 2023/08/13 |
Debian
| 2023/08/02 |
CentOS
| 2023/06/13 |
Dell-XPS13
| 2023/05/23 |
ベルト
| 2023/05/18 |
SourceForge
| 2023/04/17 |
確定申告
| 2023/02/19 |
さらば「まぐまぐ」
| 2023/01/09 |
風猷縄学
| 2022/11/23 |
$ git br -m [new-branch-name]
複数回のコミットを取りやめたいけど、コミットはしたくない場合:
$ git show| git apply -R $ git show | git apply -R $ ...
ここで commit-ID1, 2, ... は、 git log で出てくる commit-ID
$ git log --stat --graph --tags --decorate=full
(cd to workdir) $ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash $ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh $ sudo mv git-completion.bash /etc/bash_completion.d/ $ chmod a+x git-prompt.sh $ sudo mv git-prompt.sh /usr/local/bin/
ここで
w: | リポジトリ w 名 |
W: | リポジトリ w のワーキングディレクトリ |
R: | リモートリポジトリ URL(github でも独自でも)。ここでは ssh://wtech.dip.jp/var/opt/git/W/ext_site.git を git init --bare で作成 |
$ git subtree split -P ext_site -b ext_site
$ cd ~/temp $ mkdir ext_site $ cd ext_site $ git init $ git pull W ext_site
$ git remote add origin R $ git push origin -u master
$ cd W/ $ git rm -rf ext_site
参考:
$ git log --diff-filter=D --summary
$ git co $commit~1 filename
補足: tilde(~)とcaret(^)の違いを今日知ったw: https://qiita.com/chihiro/items/d551c14cb9764454e0b9
今までホームディレクトリを git で管理していたのだけど、 サイズが増えてきて git操作のたびに時間がかかるのが辛くなってきた。
で、小分けに分けることに。
w$ git clone GIT-URL w$ cd [MYNAME]
w$ git filter-branch --prune-empty --subdirectory-filter DIR/TO/SUB-DIR master
r$ mkdir -p DIR/TO r$ git --git-dir DIR/TO/SUB-DIR.git init --shared=all --bare
w$ git remote -v origin GIT-URL (fetch) origin GIT-URL (push)
w$ git push -u origin master
参考: https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/
p/nike を例に
r$ cd /var/opt/git/MY/p r$ git init --bare nike.git
l$ cd ~/p/nike l$ git remote add origin ssh://[MYSITE]/var/opt/git/MY/p/nike.git
l$ git push origin main
r$ git symbolic-ref HEAD refs/heads/main
p/nike を例に
r$ cd /var/opt/git/MY/p r$ git init --bare nike.git
l$ cd ~/p/nike l$ git remote add origin ssh://[MYSITE]/var/opt/git/MY/p/nike.git
l$ git push origin master l$ git push origin main # 最近だと main
$ git checkout -b branch_name
ブランチ
上の特定のコミット
$ git diff
例: $ git diff a315b31549 feature_66614
要は、コミットにはブランチ云々はなくリポジトリ内でグローバルな存在なので、 「ブランチとコミットの組み合わせって…?」と悩む必要はなかった、と言うお話。
ブランチ上に tag を打ってそのブランチを master にマージした時、 tag はどこを指しているのだろう?と思った次第。
実験してみる。
$ mkdir /tmp/work; cd /tmp/work $ git init
$ vi README.txt ... $ git add README.txt $ git commit -v -a
$ git co -b feature_01 $ vi README.txt $ git commit -v -a
$ git tag -a v0.0.1
$ git co master $ git merge --no-ff feature_01
$ git log --graph * commit 23f787d58f6f6da535fa0a937095bffb597b1a63 |\ Merge: 1f03b8a 939527d | | Author: ... | | Date: Wed Jan 12 08:32:22 2022 | | | | Merge branch 'feature_01' | | | * commit 939527d8f8382e30d6b5328f018a0a1cf6064f2d |/ Author: ... | Date: Wed Jan 12 08:30:07 2022 | | commit at feature_01 | * commit 1f03b8af65dcfd1fda6495d0dd6352dcf1be7881 Author: ... Date: Wed Jan 12 08:29:23 2022 init
$ git co v0.0.1
$ git log --graph * commit 939527d8f8382e30d6b5328f018a0a1cf6064f2d | Author: ... | Date: Wed Jan 12 08:30:07 2022 | | commit at feature_01 | * commit 1f03b8af65dcfd1fda6495d0dd6352dcf1be7881 Author: ... Date: Wed Jan 12 08:29:23 2022 init
…と言うことで、ブランチ上のtag だった。
ffの場合はどうなるのだろう?ということでこちらも実験。
$ mkdir /tmp/work2; cd /tmp/work2 $ git init
$ vi README.txt ... $ git add README.txt $ git commit -v -a
$ git co -b feature_01 $ vi README.txt $ git commit -v -a
$ git tag -a v0.0.1
$ git co master $ git merge --ff feature_01
$ git log --graph * commit bc5975468946ce2988dafeffb7c9f446f9daeafd | Author: ... | Date: Wed Jan 12 08:46:03 2022 | | commit at feature_01 | * commit 4cad6a08148ac8eae35e0dd263e115e2ab87fb9e Author: ... Date: Wed Jan 12 08:45:25 2022 init
$ git co v0.0.1
$ git log --graph * commit bc5975468946ce2988dafeffb7c9f446f9daeafd | Author: ... | Date: Wed Jan 12 08:46:03 2022 | | commit at feature_01 | * commit 4cad6a08148ac8eae35e0dd263e115e2ab87fb9e Author: ... Date: Wed Jan 12 08:45:25 2022 init
…なるほど、確かにその通り。
ここで(ssh to another-remote-host) $ cd ROOT/TO/GIT-REPO $ git init --bare PROJ.git
ROOT/TO/GIT-REPO: | 別リモート上の git リポジトリルート |
PROJ.git: | 対象プロジェクトリポジトリ |
ここで$ git remote add another_remote URL_TO_ANOTHER_REMOTE_REPO $ git push another_remote LOCAL_BRANCH
another_remote: | 別リモート名。名前は任意 |
URL_TO_ANOTHER_REMOTE_REPO: | リモートリポジトリURL。例: ssh://another-git.jp:/PROJ.git |
LOCAL_BRANCH: | ローカルの特定ブランチ。例: feature_1234 |
$ git co --track origin/MY_REMOTE_BRANCH
$ git checkout -b new-branch origin/new-branch
注: 安易に git pull しない。手元の現在のブランチにマージしようとするので。
$ git co MY_BRANCH $ git fetch $ git br -u origin/MY_BRANCH $ git br --set-upstream origin/MY_BRANCH # v1.7.1
$ git co [A-BRANCH] $ git fetch $ git merge origin/[A-BRANCH]
my$ git push origin my_dev
他の開発者(「やる夫」とする)がこのブランチにアクセスするには:
やる夫$ git fetch origin やる夫$ git checkout --track origin/my_dev
参考: http://www.mariopareja.com/blog/archive/2010/01/11/how-to-push-a-new-local-branch-to-a-remote.aspx
ブランチ名: new_branch、古いコミットを a9c146a09505837ec03b とした場合:
git checkout -b new_branch a9c146a09505837ec03b
参考: http://stackoverflow.com/questions/7167645/how-do-i-create-a-new-git-branch-from-an-old-commit
Ubuntu の場合、/etc/bash_completion.d/git がそのまま使える。 __git_ps1 がそれ。
例: .bashrc に例えば以下にようにする:
PS1='...$(__git_ps1)...$ '
git br -m OLD_NAME NEW_NAME
暫定的なブランチ名で開発を進めていて、正式に名前が決定。 その名前でリモート(origin)にもブランチを作成する、とか。
$ git branch --set-upstream local-branch-name origin/remote-branch-name
https://stackoverflow.com/questions/1184518/getting-existing-git-branches-to-track-remote-branches
git branch -r # リモートブランチ一覧 git branch # ブランチ一覧 git branch b01 # ブランチ 'b01' の作成 git checkout b01 # ブランチ 'b01' での作業 git branch -d b01 # ブランチ 'b01' の削除
Rails 3 対応の edgar2 なるものを作り、 既存 edgar プロジェクトの別リポジトリとする。
ここで、プロンプトは下記:my$ ssh -t [MYNAME],jjedgar@shell.sourceforge.net create : sf$ umask 002 # 多分要らない sf$ cd /home/scm_git/jjedgar/ sf$ git --git-dir edgar2 init --shared=all --bare
my$: | 私のPC の shell |
sf$: | SourceForge shell |
my$ git remote add origin ssh://[MYNAME]@jjedgar.git.sourceforge.net/gitroot/jjedgar/edgar2 my$ git config branch.master.remote origin my$ git config branch.master.merge refs/heads/master my$ git push origin master my$ git push --all my$ git push --tags
my$ cd SOME_TEMP_DIR # 適当なディレクトリに移動 my$ git clone ssh://[MYNAME]@jjedgar.git.sourceforge.net/gitroot/jjedgar/edgar2 my$ cd edgar2/ _、_ ( ,_ノ` ) n  ̄ \ ( E) グッジョブ!! フ /ヽ ヽ_//
誤って commit したが、生成されるデータなので(例: *.o, *.exe)リポジトリ の対象とさせないよう .gitignore に登録しても、後からは効かない。下記で対処:
$ git rm -n --cached '*.exe' # dry-run $ git rm --cached '*.exe' # real-run
参考: http://stackoverflow.com/questions/6535362/gitignore-after-commit
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; GIT_COMMITTER_NAME='Newname'; GIT_COMMITTER_EMAIL='newemail';" HEAD
参考: http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit-in-git
st(=status), co(=checkout), ci(=commit, checkin の意味), br(=branch) のショートカット:
$ git config --global alias.st status $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch
便利!(・∀・)
例: 'def category' というメソッドを消してしまったリビジョンを検索
$ git bisect start $ git bisect bad $ git bisect good NNNNN # ok だった rev. $ git bisect run grep 'def category' file/you/want/to/search : d243a1e9c4501e0a222b7e098dead8611c0420b0 is the first bad commit <---- !! commit d243a1e9c4501e0a222b7e098dead8611c0420b0 :
$ cd /etc $ sudo git init $ sudo vi .gitignore # *~ を追加 *~ /ld.so.cache /aliases.db /apparmor.d/cache /alternatives/ /ssl/certs /ConsoleKit $ sudo git add . $ sudo env EDITOR=vi git commit -v
/etc は root 権限で git に変更履歴を保存している。 単に git push 時に URL を一般ユーザ名 my_name としてもだめで、 秘密鍵も my_name 用を指定しないといけない。 git で秘密鍵を指定する方法は無いようで、ssh config で指定する必要がある。
Host thinkpad_x220_etc_bkp User my_name Hostname my.remote.host IdentityFile /home/my_name/.ssh/id_rsa
これは、thinkpad_x220_etc_bkp という仮のホストの /var/opt/git/thinkpad_x220_etc という git リポジトリをリモートとする設定。 thinkpad_x220_etc_bkp ホストの実際の設定は上で行ったとおり。[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = ssh://thinkpad_x220_etc_bkp/var/opt/git/thinkpad_x220_etc [branch "master"] remote = origin merge = refs/heads/master
r$ cd /var/opt/git/ r$ mkdir thinkpad_x220_etc r$ cd thinkpad_x220_etc r$ git init --bare
L$ sudo git push
なお、ここで、r$, L$ は以下の意味:
r$: | バックアップ先リモートマシン my.remote.host のプロンプト |
L$: | バックアップ元(バックアップしたい /etc のある)PC のプロンプト |
$ git config branch.autosetuprebase always
$ git config branch.branch-name.rebase true
参考: http://stevenharman.net/blog/archive/2011/06/09/git-pull-with-automatic-rebase.aspx
$ git submodule init
$ git submodule update
$ git submodule add http://HOST/PATH localpath $ git diff --cached SUBMODULE # ディレクトリエントリであることを確認 $ js .gitmodules # 必要に応じて修正 $ git commit -v -a --dry-run # 確認 $ git commit -v -a
$ git tag NEW OLD $ git tag -d OLD
参考: stackoverflow サイト
$ git checkout stash@{0} -- db/seeds.rb
他に、 stash からパッチを作成する方法:
$ git stash show -p
$ git add -p ...
会話的に y/n/他でどの変更部分をコミットに含めるか指定できる。
git のインデックスの存在理由が少し分かった。やっと…。 コミットに向けてのステージングである、と考えればすっきりする。
$ git diff HEAD^ app lib >app-x.y.z.patch
適用先にて
$ patch -p1 --dry-run
$ git reset --soft HEAD^ $ edit $ git commit -a -c ORIG_HEAD
参考: EXAMPLES of 'man git-reset'
$ git stash # 作業の退避 (クリーンな状態) $ git stash list # 退避した作業の一覧 $ git stash pop # 作業の復帰
$ sudo apt-get install git-core
$ git config --global user.name 'MYNAME' $ git config --global user.email 'MYNAME@MYDOMAIN' $ git config --global color.ui auto $ git config --global core.editor "jstar" $ git config --global core.pager "less -R -X"
(2013/01/17) pager, 'lv -c' を今まで使っていたけど、画面がクリアされるのが 気に入らなかった。less でそれができるのでそれに変更してみる。
$ mkdir work $ cd work $ git init
git var -l # 変数一覧 (編集) git add . git commit -m 'commit log message' (修正) git diff git add index.html git diff # 差分は表示されない git diff HEAD # 最新リポジトリ(HEAD)とワークツリーの差分 git add -u # ワークツリー内の全git管理ファイルをコミット対象とする git commit git commit -a # = add -u; commit git log --pretty=short
$ cd ~/nosvn/juli/repo # it is juli's local_project $ git remote add origin ssh://[MYNAME]@jjjuli.git.sourceforge.net/gitroot/jjjuli/jjjuli $ git config branch.master.remote origin $ git config branch.master.merge refs/heads/master
以下の実行前に、shell service(後述)が必要か?:
$ git push origin master
$ ssh -t [MYNAME],jjjuli@shell.sourceforge.net create
$ cd /var/opt/git $ sudo mkdir juli_public; chown [MYNAME] juli_public; chmod 700 juli_public $ git init --bare
$ cd no_git; mkdir juli_doc; cd juli_doc $ git clone /var/opt/git/juli_public html_stage $ cd html_stage $ juli init $ juli $ juli sitemap $ juli recent_update
app, lib, public に限って(vendor/ 以下にいろいろパッケージを入れたので) v0.91.1 との差分をとる:
git diff 958a057f154d7c63ff252783ca547ca5204ac017 -- app lib public/
git log --oneline v0.92.0..HEAD # v0.92.0 以降の1行ログを取得 git tag -a v0.92.1 # v0.92.1 タグ打ち。上のログを元にコメント git svn tag v0.92.1 # svn にもタグ打ち。dcommitではダメみたい
$ git archive --format=tar --prefix=edgar-0.92.0/ v0.92.0 | gzip >/tmp/edgar-0.92.0.tgz
ここで、a-sub-dir, PREFIX, PKG_NAME は適宜置き換える。$ cd a-sub-dir $ git archive --format=tar --prefix=PREFIX/ master . | gzip >PKG_NAME.tgz
git branch --track P-branch P git branch git checkout P-branch git log git reset --hard HEAD git svn rebase git svn fetch
ここで、P-branch
git: | git://HOST/... |
https: | https://HOST/... |
ssh: | aka git@HOST:..., or ssh://git@HOST/... |
http: | http://HOST/... |
git ユーザ管理の gitolite を使用することになりそうなので、φ(..)メモ。
GITOLITE-SERVER.jp: | gitolite サーバホスト名の例 |
s$: | gitolite サーバプロンプト |
C$: | クライアント(開発環境等) gitlite-admin プロンプト |
c$: | クライアント(開発環境等)プロンプト |
s$ sudo apt-get install gitolite # Ubuntu の場合 s$ sudo apt install gitolite3 # Ubuntu16.04 の場合
s$ gl-setup /tmp/yarnanaio.pub ... hit enter...
※ ここで ssh://GITOLITE-SERVER.jp は user=gitolite でアクセスするよう ~/.ssh/config で以下のように設定しておく:C$ git clone gitolite3@GITOLITE-SERVER.jp:gitolite-admin.git # Ubuntu16.0 C$ git clone ssh://GITOLITE-SERVER.jp/gitolite-admin.git # CentOS-6
host GITOLITE-SERVER.jp user gitolite
C$ cp /tmp/yaruo.pub keydir/ C$ git add keydir/yaruo.pub C$ git commit -v keydir/yaruo.pub
C$ vi conf/gitolite.conf ... @admins = me @project_A_developer = yaruo repo testing RW+ = @all repo project_A RW dev- = @project_A_developer RW+ = @admins
C$ git push
gitolite3@GITOLITE-SERVER.jp:/var/lib/gitolite3/repositories/prefix/my_proj.git が作成されているのを確認。C$ vi conf/gitolite.conf ... repo prefix/my_proj RW+ = admin R = read-only-user C$ git commit -v -a C$ git push
c$ git remote add origin ssh://gitolite3@GITOLITE-SERVER.jp/prefix/my_proj # git remote add origin ssh://GITOLITE-SERVER.jp/prefix/my_proj # CentOS-6 の場合 c$ git push origin master c$ git push origin --all c$ git push origin --tags
c$ ssh git@GITOLITE-SERVER.jp R W project-A R W project-B @R_ @W_ testing
双方向、svn→git 移行について。
ローカルでの変更を放棄するケース:
$ git reset -- test/fixtures/a.yml $ git diff test/fixtures/a.yml $ git checkout test/fixtures/a.yml
Edgar のリポジトリを svn から git に全移行(移行後は svn を使わない)。 http://blog.practical-scheme.net/shiro/20110226-sourceforge-git-migration を参考にした:
$ mkdir WORK; cd WORK $ git init $ $EDITOR .git/config # 以下を追加 [svn-remote "svn"] url = https://jjedgar.svn.sourceforge.net/svnroot/jjedgar fetch = trunk:refs/heads/master branches = branches/*:refs/heads/* tags = tags/*:refs/tags/*
tag も branch も手元に来ているそうなので、確認:$ git svn fetch
なるほど~。$ git tag : $ git branch :
local$ ssh -t [MYNAME],jjedgar@shell.sourceforge.net create [MYNAME],jjedgar@shell.sourceforge.net's password: Requesting a new shell for "[MYNAME]" and waiting for it to start. creating... starting... This is an interactive shell created for user [MYNAME],jjedgar. Use the "timeleft" command to see how much time remains before shutdown. Use the "shutdown" command to destroy the shell before the time limit. For path information and login help, type "sf-help". sf$ ls -l /home/scm_git/j/jj/jjedgar/ /home/scm_git/j/jj/jjedgar/: total 8 drwxrwsr-x 7 dummy jjedgar 1024 Jan 20 2009 jjedgar /home/scm_git/j/jj/jjedgar/jjedgar: total 24 -rw-rw-r-- 1 dummy jjedgar 23 Jan 20 2009 HEAD :
up後は、sf から確認: Code > Git Browse > ...$ git remote add origin ssh://[MYNAME]@jjedgar.git.sourceforge.net/gitroot/jjedgar/jjedgar $ git config branch.master.remote origin $ git config branch.master.merge refs/heads/master $ git push origin master $ git push --all Everything up-to-date $ git push --tags Counting objects: 6, done. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.06 KiB, done. Total 6 (delta 4), reused 0 (delta 0) To ssh://[MYNAME]@jjedgar.git.sourceforge.net/gitroot/jjedgar/jjedgar * [new tag] edgar-0.91.1 -> edgar-0.91.1 * [new tag] v0.01.00 -> v0.01.00 * [new tag] v0.02.00 -> v0.02.00 * [new tag] v0.03.00 -> v0.03.00 * [new tag] v0.92.0 -> v0.92.0 * [new tag] v0.92.1 -> v0.92.1
$ mkdir new-work; cd new-work $ git clone ssh://[MYNAME]@jjedgar.git.sourceforge.net/gitroot/jjedgar/jjedgar
ホームディレクトリを svn で管理することで、会社・家・ノートのファイルを 共有していたのだった。これを git に移行する(2011/05/12)。
リポジトリ URL は svn+ssh://[MYNAME]@[MYHOST]/var/opt/svn/[MYNAME]/trunk なのだけれど、.git/config に指定するのは ...svn/[MYNAME] まで。 trunk まで指定してうまくいかないと悩んで http 経由を試したが その必要はなかった。
$ cd /var/opt $ sudo mkdir -p git/[MYNAME] $ sudo chown [MYNAME] git/[MYNAME] $ chmod go-rwx git/[MYNAME] $ cd git/[MYNAME] $ git init --bare
$ git remote add origin ssh://[MYNAME]@[MYHOST]/var/opt/git/[MYNAME] $ git config branch.master.remote origin $ git config branch.master.merge refs/heads/master $ git push origin master $ git push --all Everything up-to-date $ git push --tags
$ mkdir new-work; cd new-work $ git clone ssh://[MYHOST]/var/opt/git/[MYNAME]
$ cd ~ $ mkdir svn git # svn = svn リポジトリ退避用、git = 一時pull用 $ mv `svn ls` svn/ # svnリポジトリを svn/ に退避 $ cd git $ git clone ssh://[MYNAME]@[MYHOST]/var/opt/git/[MYNAME] $ mv [MYNAME]/* ~/ # 取得した gitリポジトリを ~/ に移動 $ mv [MYNAME]/.[a-z]* ~/ # (同上) (git status して、.gitignore を作成) (上で作成した svn/, git/ は近いうちに削除)
(httpでの git svn アクセスを試みたが、svn+ssh で git svn も動作するので、この節はもはや不要)
$ sudo aptitude install libapache2-svn
ポリシーは以下の通り:repo$ sudo vi /etc/apache2/mods-enabled/dav_svn.confDAV svn SVNPath /var/opt/svn/[MYNAME]/ AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require user [MYNAME]
注: Require user の行がないと認証しないでダダ漏れなので注意。 また、念のため [MYNAME] ユーザだけに限定しておく。
また、/var/opt/svn/[MYNAME]/ の permission も、[MYGROUP] グループは通過できるよう 緩和:$ sudo adduser www-data [MYGROUP]
$ chmod g=rx /var/opt/svn/[MYNAME]
$ sudo htpasswd -c /etc/apache2/dav_svn.passwd [MYNAME] $ sudo /etc/init.d/apache2 restart
URL は http://iway.dip.jp/svn となる。
注: http://iway.dip.jp/svn/trunk は間違い。これを .git/config に 指定すると、エラーも出さず何も fetch しないで終わってしまう。 この後 .git/config の url エントリーを訂正しても変わらない。 git init からやり直しが必要。
(この節不要になったので、sudo a2dismod dav_svn して svn への アクセスは止めておく)
git svn clone --stdlayout SVN_REPO_URL
以下の環境に遭遇:
理由は、svn が認証を求めていたからのようだ。
fireall の中で git svn rebase するとパスワードを聞かれたので、入力。 すると、~/.subversion/auth/svn.simple/ に保存された。おそらく以降では firewall越しでも svn リポジトリに push できると思う。 これで家で仕事がますますできるようになった(^_^)
大きい某プロジェクトの trunk を git-svn すると最初の clone に 30分ほどかかって 非常に遅いので、この方法を試す。この方法だと数分でできる。
$ mkdir BRANCH_PROJ $ cd BRANCH_PROJ $ git svn init http://...
(もしかするとどちらか一方でもいいのかもしれないがよく分かってない)$ git svn fetch $ git svn rebase
(注: git 1.7.0.4 で次節の方法を行おうとすると fetch 時に以下のエラーが出る:)
Migrating from a git-svn v1 layout... Data from a previous version of git-svn exists, but .git/svn (required for this version (1.7.0.4) of git-svn) does not exist. Done migrating from a git-svn v1 layout A version A mkdist
$ mkdir BRANCH_PROJ $ cd BRANCH_PROJ $ git init
[svn-remote "BRANCH"] url = https://HOST/SVN/branches/BRANCH fetch = :refs/remotes/git-svn-BRANCH
svn log すればすぐに見つかる。 BRANCH は上の .git/config で定義した名前$ git svn fetch BRANCH -r SVN_BRANCHED_REVISION #例: 2463 (mobile_felica)
$ git branch --track local_BRANCH git-svn-BRANCH
$ git checkout local_BRANCH $ git svn rebase
詳細: http://stackoverflow.com/questions/4291347/git-svn-import-only-branch
下の方法でうまくいかなかったのは、git svn rebase と dcommit を間違えていたからかも:
上の方法を 某 svn repo に対して試みたが、commit (git svn rebase)が動作しない。 そこで、別の方法を試す:
$ git svn init -T SVN_REPO_SUBDIR $ git svn fetch
コミット
svn commit git commit git svn dcommit
リポジトリの反映
svn up[date] git svn rebase
作業ファイルの破棄
svn revert ... git checkout filename git reset --hard HEAD
diff
svn diff -c rev git show COMMIT-ID
上から重要度 高→低 の順。git の特徴である「merge が簡単」という点は、 まだそれほど使ってないので実感したメリットとしてはそれほど高くない。 でも、svn の merge は確かに苦痛だったなぁ。 だからここに挙げないわけにはいかないな、やはり。
分散型、という点は、直接には体感できてないのだけど、3. 4. は 分散型だからこそできるわけなので、これはやはり大きい。
あらためて git の分かってない所を勉強。