Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

git

git pushでフリーズする

git clone や git pull はできるのに、git push するとフリーズしてしまうのは、環境変数が悪さしてる可能性があります。ASKPASS関連の環境変数が定義されている場合、Linuxなら以下のようにunsetしてあげると、うまくpushできるようになるかもしれません。お試しあれ。

# unset SSH_ASKPASS
# unset GIT_ASKPASS

gitのbash-completionを使用してのプロンプト変更@Ubuntu 14.04

Git 最低限の設定@CentOS 5 でGitのbash_completionを使っていましたが、同じような設定をUbuntu 14.04 LTS上で設定したときのメモです。

結論から言うと、あまりやることありません。 bash-completion とgitをインストールするだけで、ログイン時に自動で設定は読み込まれるようです。(呼び出し元はここかな /etc/profile.d/bash_completion.sh)

# apt-get install bash-completion git

あとは、前回と同じように、プロンプトを書き換えるPS1をこのように設定するだけです。

# export PS1='\u@\h:\w$(__git_ps1 " (%s)")\$ '

毎回設定するのが面倒なら、~/.bashrcファイルに追記しておけばOKです。

 

なお、screenコマンドを使うと、bash-completionの設定が読み込まれず、コマンド実行する度に、以下のエラーが出力されます。

-bash: __git_ps1: コマンドが見つかりません

その場合は、~/.screenrc ファイルに以下の設定を書いてログインシェルと同じにすることで解決します。

defshell -bash

設定変更後はscreenコマンドに再度入り直す必要があります。

 

前回の記事と同様に、screenコマンド使用時にスクリーン番号表示するには、~/.bashrcファイルに以下のように記述します。

if [ "$TERM" == "screen" ]; then
    export PS1='\h:$WINDOW:\w$(__git_ps1 " (%s)")\$ ' 
else
    export PS1='\h:\w$(__git_ps1 " (%s)")\$ ' 
fi

screen実行時のプロンプトに、このようにスクリーン番号とgitのブランチ名が出力されるようになります。

root@ubuntu:0:/home/repository/test-repo (master)#

githubへのhttps(ssl)アクセスに証明書を使う@Cygwin

Cygwin上のgitで、githubからhttpsでcloneしようとしたら証明書のエラーが出てしまった場合の対処方法。

その1。証明書を無視する

セキュリティは下がりますが簡単な方法です。これだけ。

# alias git='GIT_SSL_NO_VERIFY=1 git'

 

その2。証明書を使えるようにする

cygwinには、ca-certificatesというパッケージがあるので、インストールしていない場合はインストールしておきます。その後、cygwin上で、以下のコマンド使ってgitに設定を追加してあげればOKです。

# git config --global http.sslcainfo /usr/ssl/certs/ca-bundle.crt

gitで過去のコミットを書き換える方法まとめ

コミットしてしまった後に恥ずかしい間違いに気づいて書き換えたい時の対処方法。

まずは基本。直前にコミットしたものを修正するには、

  1. ファイル(hoge.txt) を修正する
  2. 修正したファイルをaddする $ git add hoge.txt
  3. 修正をコミットする $ git commit --amend

これだけです。コミットのコメントのみを書き換えたい時は、3だけを実行すればOK。

次はもっと古い過去を書き換えたい時。ちょっと手順が複雑になります。

  1. 今のブランチ名をい記録する (ここではmasterとします)
  2. 書き換えたい歴史を探す (今回はコミットのハッシュ値が abcd1234 とする) $ git log
  3. コミットを取り出す $ git checkout abcd1234
  4. 恥ずかしい間違いを修正する
  5. 修正したファイルをaddする $ git add hoge.txt
  6. 修正をコミットする $ git commit --amend
  7. masterの現在と書き換えたい過去までの間にあったまともな歴史を、今書き換えた過去の上に再構築する $ git rebase --onto HEAD abcd1234 master ※過去が古ければ古いほど時間がかかります

結論。遠い過去の記憶を掘り起こすのは人と同じで大変です (^^;

gitで複数のコミットを一つにしてマージする

自分の開発ブランチではこまめにコミットしたいけど、リリース用のブランチにはもっと大きな単位でコミットしたい場合がありますよね。

そんな時は、merge に--squashをつければOKです。

例えば、my-dev ブランチで、ABCDE というコミットがあったとします。

   (my-dev) # git commit -m "A"
   ・・・
   (my-dev) # git commit -m "E"

リリースブランチmy-release では、A~E を一つの機能 a として扱うには、

 (my-dev)     # git checkout my-release
 (my-release) # git merge --squash my-dev

とするだけです。

あとは、commitをしてあげるだけです。

(my-release) # git commit -m "機能a追加"

gitで現在の変更を一時的に退避して他の修正をする

ソースコードにある目的をもって機能追加している際、機能とは関係ないバグを見つけることがあると思います。

Subversionやgitといったソースコード管理の仕組みを導入している場合、一つのコミット単位にいろいろな変更を入れてしまうと、後々管理が大変になってしまいます。例えば、Aという機能をやっぱり後で削除しようとした場合、Aの機能のコミットに、このバグ修正が入っていると、このバグ修正も削除されてしまいます。

こういった事態を回避するために、gitでは、statshを使えば便利です。

$ git stash

で、現在の変更点を横にのけて、バグを修正。add, commit した後、

$ git stash pop

で、横にのけておいた変更を元に戻せます。

Git 最低限の設定@CentOS 5

分散型バージョン管理システムgit をCentOS 5上で使ってみた。

まずCentOS 5にはgitは入っていないので、epel のリポジトリを使わせてもらって、yum でさくっとインストール。 その後まずやった設定が、名前とメルアドの設定。これをやっておかないと、githubのような公開リポジトリを使用した場合、マシン名などがログに残ってしまい、恥ずかしいとか。

$ git config --global user.name "My Name"
$ git config --global user.email [email protected]

つぎに、ちょっと便利にするための設定。デフォルトだとコミットログを見た場合に、文字に色がつかないため寂しいので、色をつける。

$ git config --global color.ui true

最後に、複数のブランチを使って作業していると、今どこのブランチにいるかわからなくなってしまうので、コマンドプロンプトにブランチ名を表示するように設定してみた。cd でディレクトリを移動する度に動的に現在のブランチを取得しないといけないので、PS1の環境変数を単純に変更するだけでは実現できません。しかし、git にはこれを実現するためのスクリプトがすでに用意されています。

それが、/usr/share/doc/git-1.7.4.1/contrib/completion/git-completion.bash です。(CentOSの場合)

これを.bashrc でログイン時に読み込んであげて、PS1を変更するだけです。

~/.bashrc ファイルに以下を追加

source /usr/share/doc/git-1.7.4.1/contrib/completion/git-completion.bash

さらに、maznはscreenコマンド用にPS1を変更しているので、以下のようにコマンドプロンプトを変更するための設定を追記しました。

if [ "$TERM" == "screen" ]; then
   export PS1='\h:$WINDOW:\w$(__git_ps1 " (%s)")\$ '
else
   export PS1='\h:\w$(__git_ps1 " (%s)")\$ '
fi

このように、プロンプトを変更させたい場所に、$(__git_ps1 " (%s)") を入れてあげるだけです。

すぐに変更を反映させたい場合は source こまんどで読みこんであげてくださいね。

$ source ~/.bashrc
このブログについて
プライバシーポリシー・お問い合わせ等
購読する(RSS)
記事検索
アーカイブ
カテゴリー
  • ライブドアブログ