Git

1回で複数のリモートoriginに`git push`する

SVCはバックアップという使命もあるので、特に重要なものを以下のTipsを参考に複数のリモートリポジトリにpushできるようにした。

*1回のgit pushで複数のoriginに送信する

サブのリモートに対して直接pushするとややこしくなると思うので、メインのリモートに不具合が生じたときなどにサブのリモートからでもpullできるというだけのメリットだが、これが保険として役に立つときがあるのも困るのである。

リモートリポジトリをGithubからXserverへ移転させる

Githubには、パブリックリポジトリとプライベートリポジトリがあって、Freeプランの場合、プライベートリポジトリのは容量的な制限があったが、最近仕様変更がありFreeプランでも容量無制限になったらしい。実行時間には制限があるが個人的な用途では実用上問題ないと思う。

ただ、現状のルールが未来永劫保証されることはなく、再び制限が厳しくなる可能性も考えられるので、プライベートリポジトリをレンタルサーバーのxserverへ引っ越すことにした。

Xserverへgitの最新版をインストールした

PrivateリモートリポジトリをGithubからxserverへ引越しさせた。xsrverには、デフォルトでgitインストール済みで特に不自由は感じなかったのだけれど、かなり古いバージョンだったので最新版をインストールした。

参考にしたTips

前者のTipsは、~/local/bin/ へinstallするというものだったけれど上手く行かなかった。 後者のTipsを試して最終的には成功したのですが、若干説明不足というか補足が必要な感じなので備忘録として残すことにした。

GNU gettextをインストール

$ cd tmp  # 作業ディレクトリへ移動
$ wget https://ftp.gnu.org/gnu/gettext/gettext-0.21.tar.gz
$ tar zxf gettext-0.21.tar.gz
$ rm gettext-0.21.tar.gz
$ cd gettext-0.21
$ ./configure --prefix=/home/YOUR USERNAME/opt
$ make install

インストールが成功したらmsgfmt のインストールを確認します。 無事バージョン情報が表示されたら成功です。

$ ~/opt/bin/msgfmt --version    # msgfmt のインスト―確認(インストールしたバージョン情報が表示されればOK)
$ cd  ..
$ rm -rf gettext-0.21  # 不要になったので削除
$ cd

パスを設定する

$ which msgfmt 

としても存在しないと叱られるので.basrc にPATHを設定します。 vim ~/.bashrc として下記の行を追加します。

# msgfmt
export PATH=$HOME/opt/bin:$PATH

終わったら、設定を適応させて確認します。

$ source .bashrc
$ which msgfmt       # パスを通したのでインストール先の確認
~/opt/bin/msgfmt   # インストール先が表示されればOK

gitをインストール

$ cd tmp  # 作業ディレクトリへ移動
$ wget https://www.kernel.org/pub/software/scm/git/git-2.30.0.tar.gz
$ tar zxf git-2.30.0.tar.gz
$ rm git-2.30.0.tar.gz
$ cd git-2.30.0
$ ./configure --prefix=/home/YOUR USERNAME/opt
$ make all
$ make install
$ ~/opt/bin/git --version   # git のインスト―確認(インストールしたバージョン情報が表示されればOK)
$ cd  ..
$ rm -rf git-2.30.0  # 不要になったので削除

先の設定で ~/opt/binにはすでにPATHが通っているので、確認する。

Git と Dropbox の連携

重要なファイル群をDropboxに配置し複数端末で共有している。Dropbox だけでも多少の履歴は辿れるけれど、さらに保険をかける意味でGitHubにもリポジトリを作ってみようと思った。

Dropbox内にgitツリーを置くとややこしくなろそうなのでDropbox外の別デレクトリにtreeをおくというTipsを見つけて真似してみた。

$ cd ~/Dropbox/project

$ git init --separate-git-dir /path/to/project.git
Initialized empty Git repository in /path/to/project.git/

上記を実行すると、Dropboxデレクトリにあった .git デレクトリは、/path/to/project.git に移動し、もとのデレクトリには、以下の内容の .git というファイルが生成される。内容はリンク先を書いただけのテキストファイルなのだが、Dropboxデレクトリでは普通に magit-statusできる。

gitdir: /path/to/project.git

リストアするとき

もし、将来ローカルリポジトリのPCをクリーン再インスールするケースを想定してテスト用のリポジトリで試してみた。

mkdir /path/to && cd /path/to してgit clone priject.gitする。 データリポジトリは、Dropboxをインストールして同期すれば、自動的にリストアできるので、.gitデレクトリのみ残してデータは削除して良い。