Windows 将多个存储库克隆到公共父文件夹结构中

Windows 将多个存储库克隆到公共父文件夹结构中,windows,git,github,Windows,Git,Github,我的问题是,我有一个客户,我们称之为“邪恶公司”,它通过各种项目为我的公司提供大量业务,我们使用GitHub回购协议。让我们拿2个,把它们叫做“完全不污染”和“覆盖污染” 我希望我的员工能够在克隆时默认将“TotalyNotConrupting”回购协议克隆到“EvilCorp”文件夹中 行为: 因此,起始结构是: E: └── Work └── Repos E: └── Work └── Repos └── EvilCorp ├── T

我的问题是,我有一个客户,我们称之为“邪恶公司”,它通过各种项目为我的公司提供大量业务,我们使用GitHub回购协议。让我们拿2个,把它们叫做“完全不污染”和“覆盖污染”

我希望我的员工能够在克隆时默认将“TotalyNotConrupting”回购协议克隆到“EvilCorp”文件夹中

行为: 因此,起始结构是:

E:
└── Work
    └── Repos
E:
└── Work
    └── Repos
        └── EvilCorp
            ├── TotallyNotPolluting
            └── CoveringUpPolluting
  • 具有起始文件夹结构:
    E:\Work\Repos
    以开始
  • 在Git Bash/GitHub Desktop/which中克隆repo'totallynots'(所选位置是起始文件夹结构
    E:\Work\Repos
  • 具有结束文件夹结构:
    E:\Work\Repos\evicorp\totalynots
  • 在Git Bash/GitHub Desktop/which中克隆repo“coveringuppolling”(所选位置是起始文件夹结构
    E:\Work\Repos
  • 具有结束文件夹结构:
    E:\Work\Repos\evicorp\coveringupolling
  • 因此,最终结构是:

    E:
    └── Work
        └── Repos
    
    E:
    └── Work
        └── Repos
            └── EvilCorp
                ├── TotallyNotPolluting
                └── CoveringUpPolluting
    
    通过这种方式,所有回购协议都被组织到客户文件夹中,而无需员工采取额外的步骤

    这可能吗?要创建克隆操作,然后克隆到父目录(如果不存在)或克隆到父目录(如果存在)


    注意:我已经研究过如何使用子模块,但我不想要包含其他存储库的存储库“evicorp”。克隆时我只需要文件夹。

    有一个只包含子模块的超级项目(如果你真的想让git知道的话——根据我的经验,它不太管用)


    取而代之的是一个超级项目,其中只包含一个“CheckEverything out”脚本,用户可以运行该脚本,该脚本将提供您想要的任何存储库

    您可以编写如下脚本。我没有正确测试它,但这应该给你一个正确的方向来移动它。此shell脚本的目的是创建父目录,然后分别创建每个子文件夹,检查子文件夹是否为空。如果为空,则克隆回购协议。此shell脚本可以作为可执行文件分发给员工,然后在运行时将repo克隆到正确的位置

    #create the directory, if it does not exist
    
    directoryName="<your directory name here>"
    mkdir -p directoryName
    repos="TotallyNotPolluting CoveringUpPolluting"
    forwardSlash="/"
    #go into directory
    pushd $directoryName
    
    
    
    for repo in $repos; do
    
        #check if directory is not present, if true, create the directory
    
        [ ! -d $repo ] && mkdir -p $repo
    
        #go into directory
    
        currentDirectory=$directoryName$forwardSlash$repo
        if [ "$(ls -A $currentDirectory)" ]; then
    
         echo "directory is not empty, skipping to clone"
        else
            pushd $directoryName$forwardSlash$repo
            git clone "git@$codeHost:$codeUser/$repo.git"
        fi
    
    done
    
    #如果目录不存在,请创建该目录
    directoryName=“”
    mkdir-p目录名
    repos=“Totalynotingupolling”
    forwardSlash=“/”
    #进入目录
    pushd$directoryName
    以美元回购的回购;做
    #检查目录是否不存在,如果为真,则创建目录
    [!-d$repo]&mkdir-p$repo
    #进入目录
    currentDirectory=$directoryName$forwardSlash$repo
    如果[“$(ls-A$currentDirectory)”;然后
    echo“目录不为空,正在跳到克隆”
    其他的
    pushd$directoryName$forwardSlash$repo
    git克隆“git@$codeHost:$codeUser/$repo.git”
    fi
    完成
    
    我可能误解了你的问题,但如果你创建了一个顶级回购“邪恶公司”,并在其中创建子文件夹,然后将项目添加到单个文件夹中,那么人们将不得不始终克隆“邪恶公司”回购,最终他们将获得所有其他子项目。但是,不建议在一次回购中保留多个与联合国相关的项目。如果我理解错了,请更正。@prabodhprakash我在问题的底部添加了一条注释,即拥有一个包含其他回购的回购“EvilCorp”不是我想要的。我只想创建一个文件夹,然后将其克隆到中,或者如果该文件夹已经存在,则直接克隆到其中。您可以编写一个脚本来完成此操作。一个简单的shell脚本,它转到父文件夹并检查单个文件夹,如果存在,检查该文件夹中的repo-如果不存在,则克隆repo。如果子文件夹不存在,则首先创建子文件夹,然后克隆repo。因此,您可以在github上有多个不同的repo,并在客户端有一个可执行的shell脚本来管理它们。@prabodhprakash在clone上如何自动执行此操作?有没有办法将shell脚本注入Git进程以进行克隆?若你们知道怎么做,把它作为一个答案提交,若它有效,我会接受它。现在在手机上,我会在早上第一件事发送脚本。脚本将做什么-创建父文件夹(例如:\\work\\repos),然后创建单个子文件夹,并在每个子文件夹中克隆一个repo。如果存在文件夹/子文件夹/repo,它将跳过。此外,我使用mac,因此您必须进行调整以使其在Windows中工作。期望值正确吗?这不完全是我想要的,但我想已经足够接近了。理想情况下,解决方案是在创建克隆时运行脚本,而不是在运行脚本时创建克隆。这就是为什么我询问注入脚本以在repo clone命令上运行。选择它作为答案,因为它看起来不太可能。你可以考虑把它标记为正确答案,如果这意味着你绝对正确的路径到你的解决方案。