hetemlのサーバーへsshでログインしてgit logを見た際に日本語が化けていました
git logのページャはlessで動いているらしい
lessがutf-8に対応してないと文字化けするようです
$ export LESSCHARSET=utf-8
を打てば解決
起動時に有効にするなら
$ vi ~/.bashrc
に書けばよく
即座に適応するなら
$ source ~/.bashrc
としたらいいです
ひびのきろく
bitbucketでデフォルトではパスワード認証でgit cloneやgit pushができます
パスワード入力が手間なのと、セキュリティ向上のため公開鍵方式でssh接続してみました
$ ssh-keygen -t rsa
キー名を指定 => ~/.ssh/bitbucket
キー名はbitbucketにしたので、
bitbucket
bitbucket.pub
が生成されます
公開鍵の文字列をコピーします
$ cat bitbucket.pub
ssh-rsa xxxxxxxxxxxxxxxxxxxx
をまるごとクリップボードへコピー
https://bitbucket.org/account/user/(your account name)/ssh-keys/
へアクセス(your account name)はお持ちのものを
Labelに適当な名前をつけて、コピーした公開鍵を貼り付けます
sshクライアント(手元のパソコン)でsshの設定を書きます
$ vi ~/.ssh/config
Host bitbucket
Hostname bitbucket.org
User git
IdentityFile ~/.ssh/bitbucket
bitbucketという名前で、生成した秘密鍵を指定します
git clone済みのリポジトリがあったので設定し直します
$ git remote remove origin
$ git remote add origin bitbucket:(your account name)/(repository name)
ためしにpushしてみて
$ git push -u origin master
問題なくpushできれば終了です
新規にcloneするときは
$ git clone bitbucket:(your account name)/(your repository name)
でできます
GithubやBitbucketなどのGitリポジトリへpushやpullをhttpsでするときにはIDとパスワードを求められます
一旦キャッシュするには
$ git config credential.helper cache
とすればデフォルトで900秒、メモリ上キャッシュされるようです
1分にするなら
$ git config credential.helper 'cache --timeout=60'
でできます
あんまり重要でないリポジトリでめんどうだったら、長くしたりしています
ちゃんとするならsshでやったりがいいと思います
git管理下の開発環境での修正をまとめて、git管理してない本番環境へ適用したかったのでpatchファイルを作って見ました
サンプルとしてこんなディレクトリ構成として
$ tree
.
├── 1
│ ├── 1-1
│ │ └── 1.1.text
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
└── 2
├── 1-1
│ └── 1.1.text
├── 1.txt
└── 2.txt
ちょこっとファイルを修正してcommitして
$ git diff -u HEAD^ > diff.patch
$ cat diff.patch
diff --git a/1/1-1/1.1.text b/1/1-1/1.1.text
index d7cd238..f4cb53a 100644
--- a/1/1-1/1.1.text
+++ b/1/1-1/1.1.text
@@ -1 +1,2 @@
+1-1
2-1
diff --git a/1/1.txt b/1/1.txt
index 5f2f16b..092362d 100644
--- a/1/1.txt
+++ b/1/1.txt
@@ -1 +1 @@
-1111
+this is 1.
と、git diffの結果を出力してあげます
注意するのは、実際のディレクトリの前にa、bがついています(差の比較のための印)
本番環境へgit diffを出力したのと同じ階層のディレクトリにdiff.patchを移動させて、patchコマンドで取り込みます
そのままpatchコマンドであてると、ディレクトリがないと怒られます
$ patch < diff.patch
can't find file to patch at input line 5
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/1/1-1/1.1.text b/1/1-1/1.1.text
|index d7cd238..f4cb53a 100644
|--- a/1/1-1/1.1.text
|+++ b/1/1-1/1.1.text
--------------------------
File to patch:
a、bディレクトリ分の1階層を無視してあてます
$ patch -p1 < diff.patch
patching file 1/1-1/1.1.text
patching file 1/1.txt
これで差分があたりました
実際はあてる前に、patch –dry-run -p1 < diff.patch として確かめてからあてたほうがいいです
(これだと、結果は出してくれるが、実際は更新されない)
また、git diffのときに–no-prefixをつけると
$ git diff -u --no-prefix HEAD^ > diff.patch
$ cat diff.patch
diff --git 1/1-1/1.1.text 1/1-1/1.1.text
index d7cd238..f4cb53a 100644
--- 1/1-1/1.1.text
+++ 1/1-1/1.1.text
@@ -1 +1,2 @@
+1-1
2-1
diff --git 1/1.txt 1/1.txt
index 5f2f16b..092362d 100644
--- 1/1.txt
+++ 1/1.txt
@@ -1 +1 @@
-1111
+this is 1.
と、a、bがつかなくなるので、patchコマンド時にそのままあてられます