11

この「チュートリアル」を使用してDSP環境をセットアップしました:http://toroid.org/ams/git-website-howto(はい、Tはありません)。

私のワークフローはとても簡単です:

  1. ローカルで開発する(D
  2. いくつかのことをコミットする
  3. より多くのことをコミットする
  4. ステージング(およびGithub)にプッシュ(S
  5. ステージングで新しいコードをテストする
  6. 本番環境へのプッシュ(P

私のコードには、私のコードによって縮小されてから1つのファイルに保存されるCSSファイルが含まれていますall.css。ローカルでは、このオプションをオフにしているのでall.css、CSSを変更するたびに手動で削除する必要はありません。ステージングと本番の両方で、できるだけ早くキャッ​​シュする必要があります(したがってall.css、別々のCSSファイルから作成します)。

問題は、プッシュするたびに、変更を確認する(そして適切にテストする)ために削除するall.css(そしてall.js-まったく同じストーリー)必要があることです。

チュートリアルからpost-receive、変更を特定のフォルダー(Apacheがコードを読み取る場所)にチェックアウトするフックを作成しました。

私の現在のpost-receiveフック:

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

再利用して(beingと)$GIT_WORK_TREE内の2つのファイルを削除したいのですが、できません...次の行にvar$GIT_WORK_TREEがありません。$GIT_WORK_TREEwww/all.csswww/all.js

それで私はそれをこれに変更しました、しかし私はそれが好きではありません、特に私が将来それでもっとやりたいならば:

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
rm /var/www/www.example.org/www/all.css
rm /var/www/www.example.org/www/all.js

$GIT_WORK_TREEこのように再利用されません。

私が試したがうまくいかないこと:

GIT_WORK_TREE=/var/www/www.example.org git checkout -f
rm $GIT_WORK_TREE/www/all.css
rm $GIT_WORK_TREE/www/all.js

rm:ファイルが存在しないなど(/www/all.css)($GIT_WORK_TREE空)

GIT_WORK_TREE=/var/www/www.example.org
git checkout -f

致命的:この操作は作業ツリーで実行する必要があります

GIT_WORK_TREE=/var/www/www.example.org
cd $GIT_WORK_TREE
git checkout -f

致命的:gitリポジトリ(または任意の.....)にありません

私の問題は、GITの仕組みと同様にBashの仕組みにもあると思います=)

4

3 に答える 3

27

あなたが現在試みていることにはいくつかの問題があります。おそらく、試した各例の何が問題になっているのかを順番に説明するのが最善でしょう。

GIT_WORK_TREE=/var/www/www.example.org git checkout -f
rm $GIT_WORK_TREE/www/all.css
rm $GIT_WORK_TREE/www/all.js

ここでの問題は、コマンドの直前に変数を定義した場合、環境変数は実行中のコマンドの環境でのみ設定され、現在のシェルでは設定されないことです。これは簡単にテストできます。

$ FOO=bar sh -c 'echo $FOO'            
bar
$ echo $FOO

$ 

次の試みは次のとおりです。

GIT_WORK_TREE=/var/www/www.example.org
git checkout -f

この場合、スクリプトで呼び出す他のコマンドの環境で変数を設定するには、たとえばexport GIT_WORK_TREE=/var/www/www.example.org最初の行の代わりに変数をエクスポートする必要があります。

あなたの最後の試みは:

GIT_WORK_TREE=/var/www/www.example.org
cd $GIT_WORK_TREE
git checkout -f

これには、以前の試みと同じ問題があります(つまり、エクスポートする必要がありますGIT_WORK_TREE)が、より微妙な問題もあります。このブログ投稿で説明しているように、はスクリプトの環境で(つまり現在のディレクトリ)にGIT_DIR設定されています。したがって、ディレクトリを作業ツリーの最上位に変更すると、ディレクトリではなく、そのディレクトリを指すようになります。いくつかの経験則は、(a)一緒に設定するだけでよく、(b)設定する場合は、両方を絶対パスに設定する必要があります。したがって、次のフックがあなたの場合に機能すると思います。.post-receiveGIT_DIR.gitGIT_DIRGIT_WORK_TREE

#!/bin/sh
export GIT_WORK_TREE=/var/www/www.example.org
export GIT_DIR=/var/www/www.example.org/.git
cd $GIT_WORK_TREE
git checkout -f
rm www/all.css
rm www/all.js
于 2011-07-09T18:04:44.267 に答える
7

パスに変数を使用してみませんか?

#!/bin/sh
work_tree=/var/www/www.example.org
GIT_WORK_TREE=$work_tree git checkout -f
rm $work_tree/www/all.css
rm $work_tree/www/all.js

その後、エクスポートする必要はありません。これは私にとって完璧に機能します。

于 2012-05-08T13:58:49.580 に答える
1
GIT_WORK_TREE=....
export GIT_WORK_TREE
git ...
rm $GIT_WORK_TREE/...

動作するはずであり、最も安全です(環境変数を常にエクスポートする必要はありませんが、通常は害はありません:))

于 2011-07-09T13:45:13.383 に答える