2

我正在尝试将 git 存储库转换为 lfs。我目前正在尝试这个 bash 脚本,并注意到它非常慢。有谁知道如何加快速度?我并不真正参与整个 bash 事情。

git filter-branch --prune-empty --tree-filter '
git lfs track "*.psd"
git lfs track "*.jpg"
git lfs track "*.png"
git add .gitattributes 
git ls-files -z | xargs -0 git check-attr filter | grep "filter: lfs" | sed -E "s/(.*): filter: lfs/\1/" | tr "\n" "\0" | while read -r -d $'"'\0'"' file; do
    echo "Processing ${file}"
    git rm -f --cached "${file}"
    echo "Adding $file lfs style"
    git add "${file}"
done
' --tag-name-filter cat -- --all
4

1 回答 1

2

考虑更换

while read -r -d $'"'\0'"' file; do
    echo "Processing ${file}"
    git rm -f --cached "${file}"
    echo "Adding $file lfs style"
    git add "${file}"
done

和...

xargs -0 sh -c '
  printf "Processing file: %s\n" "$@"
  git rm -f --cached "$@" && git add "$@"
' _

这样,您无需为每个文件调用一次,而是为git rm每组git add文件仅调用一次这两个工具,直至达到环境变量和命令行长度之间共享的可用空间的最大大小。


我还建议将您的git lfs track命令组合到一个调用中。例如,如果您阅读命令的源代码track,您会发现它支持以下用法:

git lfs track "*.psd" "*.jpg" "*.png"
于 2016-02-03T17:12:54.627 回答