.git フォルダを別名で利用する

GitLabのレポジトリ構成がプロジェクトごとに.gitの別名フォルダ xxx.git が作成され
設定などはそこに保存されていました。

.gitフォルダの別名を指定した場合の 利用方法がわからなかったので
git gc とかがちょっとやりたい時に四苦八苦しました。

.gitフォルダの指定方法

git --git-dir 

git-dir オプションなんてものがあったのですね。
しかも gitコマンドのすぐ後につけないと動かない。

# gitコマンドの後に --git-dir を指定
git --git-dir=xxx.git status
git --git-dir=xxx.git gc
git --git-dir=xxx.git commit -m "xxxx"

# これはオプションが有効にならない
git status --git-dir=xxx.git

良く忘れてしまうので、備忘録です。

git で post-receive 。別のレポジトリにもpush

gitlab にpushした後に、自動でBitbucketにもpushしてほしい時の post-receive

gitlab の hooks は、custom_hooksに置く

vi xxx.git/custom_hooks/post-receive

GIT_REMOTE="bitbucket"

while read OLDREV NEWREV REFNAME
do
        BRANCH=`git rev-parse --symbolic --abbrev-ref "${REFNAME}"`

        echo "Push '${BRANCH}' branch to remote '${GIT_REMOTE}'"
        git push --tag ${GIT_REMOTE} ${BRANCH}
done

これで、ローカルからgitlab にpushすると、Bitbucketにも連鎖的にpushされるようになる。


別レポジトリへのpush処理の時間がかかりそうで
バックグラウンドプロセスで実行する場合は

vi xxx.git/custom_hooks/post-receive

GIT_REMOTE="bitbucket"

while read OLDREV NEWREV REFNAME
do
        BRANCH=`git rev-parse --symbolic --abbrev-ref "${REFNAME}"`

        echo "Push '${BRANCH}' branch to remote '${GIT_REMOTE}'"

        nohup git push --tag ${GIT_REMOTE} ${BRANCH} > out.log 2> err.log &
done

PHPからTCP経由で外部のDBにアクセスできない場合

iptable や、DB側の接続制限がどこもおかしくなく
直接コンソールからのDBへ接続できる場合
ApacheからのDB接続をSELinuxが制限している場合があります。

SELinuxの詳しい説明は割愛します。解除方法は以下

setsebool -P httpd_can_network_connect_db 1