0

免責事項: この質問は、Unity3D とそのライブラリの問題のために存在します。

現在の git-cache-meta.shを取得して、Windows で使用しようとしました。うまくいきません。

私が得た最初のエラーはこの行にありました:

$ find `git ls-files`
find: invalid predicate `-'

元のものに変更してfind $(git ls-files)も機能しません (つまり、どちらの構文もダメです)。

invalid predicateような名前のファイルが原因であることは確かです"boo - foo.bar"。ということで走ってみましたfind "$(git ls-files)"。その後、非常に醜いエラー/バグになりました。

コマンド置換(奇妙な) がmingw$(で機能しない理由を知りたいのですが、もっと重要なのは:

mingwで適切git-cache-meta.sh動作させるにはどうすればよいですか?

以下に示すように、私は実際にそのキーワードなしでこれに答えることができました ->適切に。だから私はまだ誰かが速くてきれいな解決策を考え出すことを願っています <-なぜ私がこのスクリプトを最初から使用しているのか.

4

3 に答える 3

1

大きくて複雑なため、移植が難しく、遅いソリューションを見つけました。遅すぎる。うわー遅すぎる。約 9k のファイルがある私の git を処理するのに 1 分以上かかります。それでもなお、Dave Taylor 、google、および多くの man ページのおかげで、ここにあります。基本的に、for代わりに Dave のハックを使用しfindます。

git ls-files -d > .temp_gitcachemeta
for s in $(git ls-files | grep -vf .temp_gitcachemeta | sed 's/ /_+_/g');
    do t="$(echo $s | sed s'/_+_/ /g')";
    echo "touch -c -m -d \"$(date -r "$t" +'%F %T')\" \"$t\"";
done
rm .temp_gitcachemeta ;;

mingw もプロセス置換をサポートしていないように見えるため、ここで一時ファイルを使用します。

于 2013-07-24T21:31:55.907 に答える
1

元のスクリプトはエレガントで複雑なスタイルで書かれています (おそらく必要以上に)。複雑さのほとんどを取り除いて書き直しました。mingwでどの機能が壊れているのかわかりませんが、これはうまくいく可能性が高いです:

GIT_CACHE_META_FILE=.git_cache_meta
case $@ in
    --store)
        git ls-files|while read file; do
            find "$file" \( -printf 'chown %U %p\n' \) \
               \( -printf 'chgrp %G %p\n' \) \
               \( -printf 'chmod %#m %p\n' \) \
               \( -printf 'touch -c -d -m "%TY-%Tm-%Td %TH:%TM:%TS" "%p"\n' \)
        done | tee $GIT_CACHE_META_FILE
        ;;
    --apply)
        sh -e $GIT_CACHE_META_FILE
        ;;
    *)
        echo "Usage: $0 --store|--apply"; exit 1
        ;;
esac

システム上の実行可能ファイルの 1 つが、ここで使用されているすべてのオプションをサポートしていない場合にのみ、問題が発生する可能性があります。つまり、find、chown、chgrp、touch、および chmod です。

于 2013-07-26T08:51:47.067 に答える