とある事情から、ずっと手元のVM上のgitで一元管理してるソースコード管理を、状況に応じて別のレポジトリで管理するように切り替えることにしました。
僕以外の人には、ほとんど関係のない話です。
以前からコードを外部のリポジトリで管理しても、手元に全部のコードが残るので問題は無いし、そもそも僕の書くコードを流用する奇特な人はそんなにいないと思うので問題なさげ、と思っていました。
でも、手元のVMで管理が間に合ってるため外部公開とか面倒くさいし、CodeReposも最近は全然使ってないし、僕のコードは万人が頻繁に使う公共性の高いものではないのでユーザも居ないし、あんまり気持ちよく感じないなと思ってました。
今回の件は @mamoruk さんから、かなり背中を押されてやっとやり始めました。感謝。やりはじめると不思議と手が動きます。
状況に応じて管理方法を分けることにした
ソースコードは公開して平気なコードから、公開したら絶対駄目なコードまでいろいろあるので、自分でコントロールする必要があるコードはよりプライベートなgitレポジトリで管理することにした。
| レポジトリ | 管理するコード |
| github | 公開して大丈夫で、とくにパッケージにもなってないコード |
| レンタルサーバ上のgit | 公に公開できないけど、知人に見せたいコード |
| 手元のVM上のgit | 絶対公開できないコード |
| 自分のサイトかGoogle Code | アプリケーションがまとまったらパケ化して上げておく |
アプリケーションについてはアプリケーションごとにWIkiやトップページが欲しいので、自分のサイトで管理するかGoogle Codeで管理しようと思う。
多分、僕のサイト上に置いてあるよりもGoogle Code上にあった方が嬉しい人が多そう。
github の用意
実は github にアカウントを持ってなかったのでアカウント作りからやった。
自分のまとまってないコードを積極的に開示する状況に陥ることは予測してなかった。
アカウントを作ったあとは、以下のように作業をした。
- overlast's private - GitHub
--
http://github.com/overlast/private
Global setup:
Download and install Git
git config --global user.name "Your Name"
git config --global user.email メールアドレス
Add your public key
Next steps:
mkdir private
cd private
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:overlast/private.git
git push origin master
Existing Git Repo?
cd existing_git_repo
git remote add origin git@github.com:overlast/private.git
git push origin master
push するために追加する必要があるSSH の public キーは ssh-rsa だと怒られたけど、ssh-dss だと怒られなかった。
今後は dotfile など毒にも薬にもならないコードから順にアップしていく。
レンタルサーバ上に git をインストール
さくらのレンタルサーバにgitをインストールしてレポジトリを作った。
サーバの容量の上限が10GByteになったので、やろうと思えば、手元のコードは全部レンタルサーバでも管理できる。
さくらのレンタルサーバにgitをインストール
さくらのレンタルサーバに git の一番新しそうなのをインストール。
今日の段階では 1.7.1 っぽかったので、これをインストール。
実は自分の環境では、gmak中にエラーが起きた。
- @さくら
$ mkdir ~/src
$ cd src
$ wget http://kernel.org/pub/software/scm/git/git-1.7.1.tar.gz
$ tar xfvz ./git-1.7.1.tar.gz
$ cd git-1.7.1
$ mkdir $HOME/local
$ ./configure --prefix=$HOME/local
$ gmake
(中略)
SUBDIR perl
/usr/bin/perl Makefile.PL PREFIX='/home/overlast'
Only one of PREFIX or INSTALL_BASE can be given. Not both.
gmake[1]: *** [perl.mak] エラー 255
gmake: *** [perl/perl.mak] エラー 2
たぶん、perlbrewを使っているからかな。
このエラーはINSTALL_BASEを指定して、perlbrewでprel5なモジュールが入るディレクトリを指定すれば解決できる。
あと、このperlモジュールをインストールするときに、manを/share以下にインストールしようとするので、それをローカルフォルダに入れてくれるようにSITEPREFIXも指定。
別途perlモジュールをコンパイルして、続きをgmake。
- @さくら
$ cd perl
$ perl ./Makefile.PL SITEPREFIX=$HOME/local INSTALL_BASE=${HOME}/perl5
$ gmake SITEPREFIX=$HOME/local INSTALL_BASE=${HOME}/perl5
$ cd ../
$ gmake SITEPREFIX=$HOME/local INSTALL_BASE=${HOME}/perl5
$ gmake SITEPREFIX=$HOME/local INSTALL_BASE=${HOME}/perl5 install
.bashrcのPATHに「$HOME/local/bin」を追加して、source ~/.bashrc。
あとは、--bareをつけてinitする。付けないとpushできない。
- @さくら
$ cd $HOME
$ mkdir repos.git
$ cd repos.git
$ git init --bare
Initialized empty Git repository in /home/you/repos.git/
これでローカルからpushするリポジトリはできた。
bareなリポジトリはデータ格納場所なので開発はできない。
cloneして、そこで開発する。まっさらだったら手元のgitリポジトリをadd & pushする。
まずは、ローカルなPC上にディレクトリを作ってgit initしてcommitしてみる。
- @ローカル
$ mkdir repos
$ cd repos
$ echo "This is my git repository" >> README
$ git init
Initialized empty Git repository in /home/you/repos/.git/
$ git add README
$ git commit -m "first commit"
[master (you-commit) 8d0baee] first commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README
今度は、これをレンタルサーバ上のリポジトリに突っ込んでみる。
SSHでpushするとレンタルサーバ上のgit-receive-packを見つけられないので、receive-packオプションでgit-receive-packの絶対パスを与える。
- @ローカル/repos
$ git remote add origin ssh://you@you.sakura.ne.jp/home/you/repos.git
$ git push --receive-pack=/home/you/local/bin/git-receive-pack origin master
Public key aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa blacklisted (see ssh-vulnkey(1)); refusing to send it
you@you.sakura.ne.jp's password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 231 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://you@you.sakura.ne.jp/home/you/repos.git
* [new branch] master -> master
問題無いので、再度READMEを編集してadd、commitして、pushする。
- @ローカル/repos
$ echo "I'm very sleepy" >> README
$ git add README
$ git commit -m "second commit"
[master 8044db5] second commit
1 files changed, 1 insertions(+), 0 deletions(-)
$ 再びpush
うまくいった
うまくいく。
つぎは今度は自分のPCの別のディレクトリでcloneする。
レンタルサーバの$HOME/local以下にgitをインストールしたので、SSHでアクセスするとパスが通っていないことになる。
なので、--upload-packオプションでgit-upload-packの絶対パスを与える。
cloneしたら3回目のコミットをclone先でやってpushもしてみる。
- @ローカル/repos
$ cd ../
$ mkdir repostest
$ cd repostest
$ git clone ssh://you@you.sakura.ne.jp/home/you/repos.git repos --upload-pack /home/you/local/bin/git-upload-pack
Initialized empty Git repository in /home/you/repostest/repos/.git/
Public key aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa blacklisted (see ssh-vulnkey(1)); refusing to send it
you@you.sakura.ne.jp's password:
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
Receiving objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
$ cd repos
$ ls
README
$ less README
This is my git repository
I'm very sleepy
$ echo "I'm hungry" >> README
$ less README
This is my git repository
I'm very sleepy
I'm hungry
$ git add README
$ git commit -m "third commit"
[master e4fb5a1] third commit
1 files changed, 1 insertions(+), 0 deletions(-)
$ git push --receive-pack=/home/you/local/bin/git-receive-pack origin master
うまくいった
うまくいった。
今度は、最初に作ったreposを更新する。
- @ローカル/repostest
$ cd ../../repos
$ git merge origin/master
Updating 68abac3..e4fb5a1
Fast-forward
README | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$ less ./README
This is my git repository
I'm very sleepy
I'm hungry
どうやら大丈夫。
clone、push、mergeが動いているので、多分なんとかなるはず。
ローカルで何かミスったら「git reset --hard ORIG_HEAD」すれば、直前のcommitに戻れる。
こっちでは活発な開発をおこなって、ある程度まとまったら知人にお試し公開する場所にする。
関連リンク
- GitHub
--
https://github.com/