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

时间:2018-12-24 01:14:14

标签: git

我大约有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

2 个答案:

答案 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存储库中的嵌套目录,则需要加倍努力,但这可能不是您想要的。