跟踪Git中的文件权限。运行git缓存元时出错:“0”;查找:您有太多';)'&引用;
我目前正在尝试实现在进行Git克隆时能够保留文件权限。但是,当我运行命令时,我收到了这个错误跟踪Git中的文件权限。运行git缓存元时出错:“0”;查找:您有太多';)'&引用;,git,shell,Git,Shell,我目前正在尝试实现在进行Git克隆时能够保留文件权限。但是,当我运行命令时,我收到了这个错误 $ git-cache-meta.sh --store find: you have too many ')' 之前的一个错误是Git列出了太多的文件(我正在跟踪大约2.5GB的文件,据我所知,这些文件已经超出了单个Git项目的限制) shell脚本的初始化是否有问题(我使用了下面列出的主代码: 但我没有使用任何修订,这些修订似乎是针对不同的问题)。该页面上报告的几个错误似乎与文件名中的特定字符有关,
$ git-cache-meta.sh --store
find: you have too many ')'
之前的一个错误是Git列出了太多的文件(我正在跟踪大约2.5GB的文件,据我所知,这些文件已经超出了单个Git项目的限制)
shell脚本的初始化是否有问题(我使用了下面列出的主代码:
但我没有使用任何修订,这些修订似乎是针对不同的问题)。该页面上报告的几个错误似乎与文件名中的特定字符有关,但仔细查看,我找不到任何可能导致我收到错误的“(”或“)
但是,如果它与试图跟踪过多文件有关,那么在Git中部署文件时,是否有关于维护文件权限和所有者元数据的建议?尝试以下方法:
function get_metadata {
git ls-files |
xargs stat -c $'%a\t%U\t%G\t%x\t%n' |
while IFS=$'\t' read -r perm user grp date name; do
echo chown "$user" "$name"
echo chgrp "$grp" "$name"
echo chmod "$perm" "$name"
echo touch -c -d "'$date'" "$name"
done
}
case $1 in
--stdout) get_metadata ;;
--store) get_metadata > "$GIT_CACHE_META_FILE" ;;
--apply)
[[ -f "$GIT_CACHE_META_FILE" ]] &&
sh "$GIT_CACHE_META_FILE"
;;
*) echo "usage: ..." ;;
esac
这假设您的所有文件名都不包含换行符。如果将
set-x
添加到该脚本中,您会看到find命令有什么变化?对不起,我对shell命令不是很熟悉,但我应该在哪一行添加它?在find
命令之前的任何地方都可以。使shebang行-ex
也适用于这种情况。
function get_metadata {
git ls-files |
xargs stat -c $'%a\t%U\t%G\t%x\t%n' |
while IFS=$'\t' read -r perm user grp date name; do
echo chown "$user" "$name"
echo chgrp "$grp" "$name"
echo chmod "$perm" "$name"
echo touch -c -d "'$date'" "$name"
done
}
case $1 in
--stdout) get_metadata ;;
--store) get_metadata > "$GIT_CACHE_META_FILE" ;;
--apply)
[[ -f "$GIT_CACHE_META_FILE" ]] &&
sh "$GIT_CACHE_META_FILE"
;;
*) echo "usage: ..." ;;
esac