2017-11-11 9 views
1

私は自分のアプリのアップデータをまとめてハッキングしているので、コーディングスキルの少ない人も自分のマシンにアプリをインストールし、実行し、アップデートすることができます。ここで私のレポに何か変更があるかどうかを知るために、この磁器のGitコマンドを使用しないでください。

は、Windowsのコマンドプロンプトのために書かれ、アップデータの一例である:

@echo off 
for /f %%i in ('call git status --porcelain') do set stash=%%i 
if not [%stash%] == [] (
    echo Stashing local changes... 
    call git add . 
    call git stash -q 
) 
echo Updating App... 
call git pull origin master 
if not [%stash%] == [] (
    echo Restoring local changes... 
    call git stash apply -q 
) 
echo Updating Dependencies... 
call npm update 
echo Done 
pause 

あなたが見ることができるように、私はアプリを隠しする必要があるローカルな変更があるかどうかを伝えるためにgit status --porcelainを呼んでいますリモートマスターブランチをプルする前に

このコマンドは、追跡またはそうでない場合は、作業ディレクトリがクリーンである場合何もを返しませんが、ローカルの変更がある場合は、必ず何かを返します。

私はgitで配管作業を行うために磁器のコマンドを使用するのは悪いことを他のSOの投稿から読んだことがありますが、この場合はうまく働いていますが、なぜgit status --porcelainコマンド清潔な作業ディレクトリがある場合何かを返します。

私の質問は次のとおりです。この特定の用途に磁器を使用するのは間違っていますか?もしそうなら、なぜですか?

ボーナス:これについてはどうすればよいでしょうか?

答えて

1

--porcelainスイッチで使用しても問題ありません。さらに、ドキュメントを覗いてみると、コマンドが使用されたとおりに正確に使用されていることがわかります。

スクリプトの構文解析が簡単な形式で出力します。これは短い出力に似て ですが、Git バージョンとユーザー設定に関係なく安定しています。詳細は以下を参照してください。ここ

別のオプションも簡単に解析出力を返しますが、将来のバージョンで同じように動作することを保証することはできません-sスイッチ(git status -s)を使用することです。

git statusのこの特定の使用法は何らかの形で間違っています。それは仕事をして、それを信頼できる方法で理解しやすくします。磁器を用いた同等のコマンドは、例えば、 :-tスイッチの

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude --others --modified -t 

しかしgit ls-filesからドキュメント:

この機能は、半非推奨です。スクリプティング目的のために、 git-status(1) - 磁器とgit-diff-files(1) - name-statusはほとんど常に であり、常により良い の代替であり、ユーザはgit-status(1)またはgit-diff(1) - よりユーザフレンドリな選択肢の名前 - ステータス。

だから、gitマニュアルでもgit statusの代わりに使用することをお勧めします。

+0

。私は、なぜ、彼らがこのより配管方位の高いシナリオで使用されることになっていたときに、なぜスイッチが ' - porcelain'を作ったのか、まだ混乱しています。 – Bango

+1

@Bango、多くのgitコマンドには、このスイッチが使用されているときに安定した出力を提供するために '--porcelain'スイッチがあります。 – Opal

1

git status --porcelainは磁器のコマンドではありません。このオプションの名前は誤解を招くものですが、実際には「磁器スクリプトでの使用に適した、解析しやすく安定した出力を与える」という意味です。したがって、--porcelainは「配管命令として機能する」を意味します。

は、すでに述べたように、あなたは何をすべきか、 --porcelainがあなたのやり方を使用することを意味していると間違って何もない、他の回答で述べています。啓発的だった

関連する問題