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

我发现了一个大而复杂的,因此难以移植且缓慢的解决方案。太慢了。哇哇太慢了。花费一分钟多的时间来浏览我的 git,它有大约 9k 个文件。但是,感谢 Dave Taylor、google 和许多手册页,它仍然存在。基本上,使用for和戴夫的黑客,而不是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

唯一可能出错的是您系统上的一个可执行文件不支持此处使用的所有选项。那将是:find、chown、chgrp、touch 和 chmod。

于 2013-07-26T08:51:47.067 回答
0

\rMinGW 喜欢调用本地 Windows 工具,这些工具会在每行的末尾添加一个回车符 (CR, )。所以你可以替换$(commandname)$(commandname | sed $'s/\r$//')或类似的东西。

另一种选择是尝试更多的 Unix-y,例如 Interix/SFU/SUA 或 Cygwin 或 MSYS 或 AT&T UWIN。

至于一般的元数据,您的问题将是诸如chownchgrp和之类的chmod东西touch在 Windows® 平台上的行为会有所不同,有些东西甚至不存在,尤其是在 FAT 文件系统上,而 NTFS 有一组完全不同的元数据(不同的格式对于时间戳、ACL 而不是 Unix 用户/组/其他权限等),因此可能需要对 Unix 脚本世界NT 平台非常了解的人进行一些开发工作。

最后,我想说这个脚本是一个安全漏洞,因为它只评估存储的命令,所以如果其他人有能力写入 .git_cache_meta 文件,他们将拥有你的系统。

于 2013-07-24T15:09:52.033 回答