有没有更简单的方法可以将多个文件夹"git init"到不同的存储库中?



我有大约50个本地文件夹,我打算将它们初始化为单独的git存储库,托管在GitHub上。

我想知道,除了在50个文件夹中的每个文件夹中单独运行git init之外,是否还有更简单的方法来初始化多个Git存储库。

我已经为两个50个的存储库单独运行了git init,但它看起来很乏味,我觉得一定有一种更简单的方法。

更新:

正如本文所提到的,我会运行下面的bashshell吗?

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

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

在运行git init之前,您至少需要将cd放入每个目录中。应该这样做:

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,从而避免符号链接的问题,并返回到您开始的位置。

不建议使用反引号;请改用$( … )表示法。但是,如果名字中可能有空格,那么从这个结果中读取名字也不是一个好主意。你最好用"地球仪"。在尝试执行git init之前,可能还值得测试是否缺少.git子目录,尤其是在必须多次运行脚本的情况下。此外,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存储库,你需要更加努力,但这可能不是你想要的。

您可以将-C选项与Git一起使用,这告诉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)

最新更新