2016-09-15 44 views
1

我的问题是我有一个客户,我们称他们为'Evil Corp',通过各种项目为我的公司提供很多业务,我们使用GitHub回购。让我们取2并称它们为“完全不打印”和“覆盖打印”。将多个存储库克隆到共同的父文件夹结构中

我希望我的员工在克隆时默认将'TotallyNotPolluting'回购克隆到'EvilCorp'文件夹中。

行为:

所以初始结构是:

E: 
--Work 
    --Repos 
  1. 在启动文件夹结构:E:\Work\Repos开始
  2. 在Git中的Bash/GitHub的桌面/不管克隆回购 'TotallyNotPolluting' (选定的位置是起始文件夹结构E:\Work\Repos
  3. 已结束文件夹结构:E:\Work\Repos\EvilCorp\TotallyNotPolluting
  4. 在Git中的Bash/GitHub的桌面/不管克隆回购 'CoveringUpPolluting'(选定的位置是起始文件夹结构E:\Work\Repos
  5. 有结尾的文件夹结构:E:\Work\Repos\EvilCorp\CoveringUpPolluting

所以最后结构是:

E: 
--Work 
    --Repos 
    --EvilCorp 
     --TotallyNotPolluting 
     --CoveringUpPolluting 

这样,所有的回购都会组织到客户文件夹中,而员工不会采取额外的步骤来执行此操作。

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

注意:我已经看过使用子模块,但我不想要包含其他存储库的存储库“EvilCorp”。克隆时我只想要这个文件夹。

+0

我可能误解了你的问题,但如果你创建一个顶级回购“邪恶公司”,并创建子文件夹到它,然后添加项目到单个文件夹,那么人们将不得不永远克隆“邪恶公司”回购他们最终会得到所有其他的子项目。但是,不建议将多个不相关的项目保存在一个回购单中。如果我了解错误,请纠正。 – prabodhprakash

+0

@prabodhprakash我在问题的底部添加了** NOTE **,其中包含其他回购的回购'EvilCorp'不是我想要的。我只想创建一个文件夹,然后*克隆进入,或者如果文件夹已经存在直接克隆到它。 – Daevin

+0

你可以写一个脚本来为你做。一个简单的shell脚本,转到父文件夹并检查单个文件夹(如果存在),检查该文件夹中的回购 - 如果没有任何内容,请克隆回购。如果子文件夹不存在,如果首先创建子文件夹,然后克隆回购。因此,您可以在github上拥有多个不同的回购站和一个在客户端管理它们的可执行shell脚本。 – prabodhprakash

回答

1

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

#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 "[email protected]$codeHost:$codeUser/$repo.git" 
    fi 

done 
+0

这不是我正在寻找的东西,但它足够接近我想。 理想情况下,解决方案将是在制作克隆时运行的脚本,而不是脚本运行时生成的克隆。这就是为什么我要求注入脚本以运行repo clone命令。 被选为答案,因为它似乎不可能。 – Daevin

+0

如果您指出您的解决方案绝对正确,则可以考虑将其标记为正确答案。 – prabodhprakash

0

有一个只包含子模块的超级项目(如果你真的想让git知道 - 尽管按照我的经验,它并不能很好地工作)。

取而代之的是一个超级项目,只包含一个“check everything out”脚本,然后用户可以运行该脚本,从而提供您想要存在的任何存储库。

相关问题