git clone や git pull はできるのに、git push するとフリーズしてしまうのは、環境変数が悪さしてる可能性があります。ASKPASS関連の環境変数が定義されている場合、Linuxなら以下のようにunsetしてあげると、うまくpushできるようになるかもしれません。お試しあれ。
# unset SSH_ASKPASS # unset GIT_ASKPASS
やってみて 調べてみて 苦労しなけりゃ 箱は動かじ
git clone や git pull はできるのに、git push するとフリーズしてしまうのは、環境変数が悪さしてる可能性があります。ASKPASS関連の環境変数が定義されている場合、Linuxなら以下のようにunsetしてあげると、うまくpushできるようになるかもしれません。お試しあれ。
# unset SSH_ASKPASS # unset GIT_ASKPASS
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)#
Cygwin上のgitで、githubからhttpsでcloneしようとしたら証明書のエラーが出てしまった場合の対処方法。
セキュリティは下がりますが簡単な方法です。これだけ。
# alias git='GIT_SSL_NO_VERIFY=1 git'
cygwinには、ca-certificatesというパッケージがあるので、インストールしていない場合はインストールしておきます。その後、cygwin上で、以下のコマンド使ってgitに設定を追加してあげればOKです。
# git config --global http.sslcainfo /usr/ssl/certs/ca-bundle.crt
コミットしてしまった後に恥ずかしい間違いに気づいて書き換えたい時の対処方法。
まずは基本。直前にコミットしたものを修正するには、
これだけです。コミットのコメントのみを書き換えたい時は、3だけを実行すればOK。
次はもっと古い過去を書き換えたい時。ちょっと手順が複雑になります。
結論。遠い過去の記憶を掘り起こすのは人と同じで大変です (^^;
自分の開発ブランチではこまめにコミットしたいけど、リリース用のブランチにはもっと大きな単位でコミットしたい場合がありますよね。
そんな時は、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追加"
ソースコードにある目的をもって機能追加している際、機能とは関係ないバグを見つけることがあると思います。
Subversionやgitといったソースコード管理の仕組みを導入している場合、一つのコミット単位にいろいろな変更を入れてしまうと、後々管理が大変になってしまいます。例えば、Aという機能をやっぱり後で削除しようとした場合、Aの機能のコミットに、このバグ修正が入っていると、このバグ修正も削除されてしまいます。
こういった事態を回避するために、gitでは、statshを使えば便利です。
$ git stash
で、現在の変更点を横にのけて、バグを修正。add, commit した後、
$ git stash pop
で、横にのけておいた変更を元に戻せます。
分散型バージョン管理システム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