我大约有50个本地文件夹,打算将它们初始化为单独的git存储库,并将其托管在GitHub上。
我想知道,除了在50个文件夹中的每个文件夹中分别运行git init
之外,还有没有更简单的方法来初始化多个Git存储库。
我已经分别在50个存储库中的2个存储库上运行git init
,但这似乎很乏味,而且我认为必须有一种更简单的方法。
更新:
根据this post的引用,我可以运行以下bash shell吗?
cd folder-with-all-folders-to-git-init
for D in `find . -type d`
do
git init && git add . && git commit -m "Initial commit"
done
答案 0 :(得分:2)
您可以在Git中使用-C
选项,它告诉Git将其工作目录切换到另一个目录。使用带特殊字符的目录名可以保证安全。
cd folder-with-all-folders-to-git-init
while read -r D; do
if [ -d "$D/.git" ]; then
continue # a git repo exists
fi
git -C "$D" init && \
git -C "$D" add -A && \
git -C "$D" commit -m "Initial commit"
done < <(find . -type d)
答案 1 :(得分:1)
outline命令部分正确,但大多数情况下不是正确的,但可以使其足够正确。
您有:
cd folder-with-all-folders-to-git-init
for D in `find . -type d`
do
git init && git add . && git commit -m "Initial commit"
done
至少,在运行cd
之前,您需要git init
进入每个目录。应该这样做:
cd folder-with-all-folders-to-git-init
for D in `find . -type d`
do
(cd "$D" && git init && git add . && git commit -m "Initial commit")
done
这将启动一个子shell,该子shell避免了符号链接的问题,并避免了回到您的起点。
不建议使用反引号;请改用$( … )
表示法。但是,如果名称中可能有空格,则从结果中读取名称也不是一个好主意。您最好使用“全局”。在尝试执行.git
之前,可能还值得测试一下是否缺少git init
子目录,尤其是在必须多次运行脚本的情况下。另外,find
将找到子目录,例如现有的.git
子目录。
这导致:
cd folder-with-all-folders-to-git-init
for D in *
do
if [ -d "$D" ] && [ ! -d "$D/.git" ]
then (cd "$D" && git init && git add . && git commit -m "Initial commit")
fi
done
这是对该问题的合理可靠的解决方案。如果确实有要嵌套到独立Git存储库中的嵌套目录,则需要加倍努力,但这可能不是您想要的。