Hatena::ブログ(Diary)

くろまほうさいきょうでんせつ RSSフィード

2012/06/01 (金)

github でサブアカウント、ユーザー切り替え


Githubでサブアカウントを使おうとしてもSSH公開鍵が同じだと同じユーザーと判断されてしまうため、そのままだとユーザー切り替えとか簡単には出来ません。

以下やりかた

メインアカウントの設定は既にできてるものとします。

まずはサブアカウントの準備

サブアカウント用のsshキーペア作成
cd
mkdir ~/.ssh/key4github/
cd ~/.ssh/key4github/
ssh-keygen -t rsa -C "hoge@example.com"

キーの場所指定で ~/.ssh/key4github/ とする
パスフレーズを忘れないように

サブアカウント用のGithub側設定

右上アイコンAccountSettings>SSH Keys>Add SSH Keys から
できた id_rsa.pub をはりつけ。

接続確認

さっき作った鍵でアクセスできるかどうか試します。

ssh -i ~/.ssh/key4github/id_rsa -T git@github.com

メインとサブの使い分け

簡単にサブアカウントアクセスできるようにSSHの設定を行います。

hoge.github.com でsshできるようにする

~/.ssh/config 編集

Host hoge.github.com
    User git
    Port 22
    Hostname github.com
    IdentityFile ~/.ssh/key4github/id_rsa
    TCPKeepAlive yes
    IdentitiesOnly yes

確認

ssh -T hoge.github.com

サブアカウント用リポジトリ作成

githubのチュートリアルどおり新repository作ってこのリポジトリ(サブアカ)用のconfigを設定する。
しかし、このままだといつものSSHキーを使ってしまうのでメインのアカウントにつなげてしまいます。

接続先をいじる

リモートの指定を先ほど.ssh/configで設定したホストにする
(gitコマンドで add remote するときに指定しちゃったほうが手っ取り早いかも)

[remote "origin"]
#   url = git@github.com:hoge/firstrepo.git
    url = git@hoge.github.com:hoge/firstrepo.git

これでgithubへの接続時にさっき作ったサブアカウントのSSHキーを使うようになり、サブアカウントでの接続となります。

おまけ

ユーザー名や(あれば)APIキーも変更。

[github]
    user = hoge
    token = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[user]
    name = hoge 
    email = hoge@example.com

ここまでだと毎回パスフレーズを聞かれるがそれはまた別件。

2012/05/08 (火)

git svn switch --relocate 的なことをする (patch利用)

http://d.hatena.ne.jp/do_aki/20110530/1306751266
↑で紹介されているような .git/config を書き換える方法が使えない場合の話です。
(旧svnリポんジトリが時すでに削除済み とか)

新gitワーキングツリーに手動でブランチを移植する感じでがんばります。

全体の流れ

  • 旧gitワーキングツリーで対象ブランチのパッチ作成
  • 新gitワーキングツリーで対応するブランチ作成
  • 新gitワーキングツリーのブランチでパッチ適用

旧gitワーキングツリーで対象ブランチのパッチ作成

こんな感じの状態だとします
$ tree
.
|-- patch        #パッチ置き場
|-- new_gitrepo  #新git-svnワーキングツリー
`-- old_gitrepo  #旧git-svnワーキングツリー

旧リポジトリで移植したいブランチを確認します。

ブランチの派生元となるmasterのコミット

移植したいブランチの最新コミット
を確認。

$ cd ~/old_gitrepo
$ git log --oneline --decorate --all --graph
* d456789 (br2) 修正bar
| * c345678 (br1) 修正foo
|/
* b234567 (HEAD, git-svn, master) 修正fuga
* a123456 修正hoge
  ・・・

パッチを生成します

git format-patch 取得範囲自..取得範囲至 -o パッチ保存ディレクトリ

$ git format-patch b234567..c345678 -o ~/patches/br1
$ git format-patch b234567..d456789 -o ~/patches/br2

新gitワーキングツリーにブランチを作ってパッチ適用

ブランチ作成してパッチ適用
$ cd ~/new_gitrepo
$ git checkout -b br1
$ git apply ~/patches/br1/*
$ git ci -m "修正foo"

もう一つのブランチも同様に

masterからブランチ作る

$ git checkout master
$ git checkout -b br2
$ git apply ~/patches/br2/*
$ git ci -m "修正bar"

以上。

パッチのメッセージがメール用にエンコードされたままっぽかったので、git am とせずに apply でコミットメッセージを改めて設定しています。

というか旧ワーキングツリーのブランチの個々のコミットの情報は失われてひとまとめになっちゃいますね。