如何使用Bash中的Git递归提交每个文件?

时间:2017-09-18 15:51:14

标签: git bash

我正在尝试将大量的二进制文件推送到GitHub,并且由于提交规模很大,它总是会失败。

所以我决定编写一个bash脚本,在给定的目录下递归添加和提交每个文件,所以我可以逐个推送它们。

这就是我的尝试:

#!/bin/sh

for FILE in ${PROJECT_DIR}/*
do
    echo ${FILE}
    git add ${FILE}
    git commit -m "initial commit ${FILE}" 
done

但是当文件名有空格或unicode字符时,它会失败。

我正在为此寻找一个强大的脚本。

1 个答案:

答案 0 :(得分:1)

问题在于git add命令中缺少适当的引号。不将其括在双引号内,使变量易受shell的Word-Splitting影响,即通过分隔符将字符串拆分为单个字(默认为空格)

shopt -s globstar        
for fileToCommit in ${PROJECT_DIR}/**/*; do
    test -f "$fileToCommit" || continue 
    printf "%s\n" "${fileToCommit}"
    git add "${fileToCommit}"
    git commit -m "initial commit ${fileToCommit}" 
done