Windows 将多个存储库克隆到公共父文件夹结构中
我的问题是,我有一个客户,我们称之为“邪恶公司”,它通过各种项目为我的公司提供大量业务,我们使用GitHub回购协议。让我们拿2个,把它们叫做“完全不污染”和“覆盖污染” 我希望我的员工能够在克隆时默认将“TotalyNotConrupting”回购协议克隆到“EvilCorp”文件夹中 行为: 因此,起始结构是:Windows 将多个存储库克隆到公共父文件夹结构中,windows,git,github,Windows,Git,Github,我的问题是,我有一个客户,我们称之为“邪恶公司”,它通过各种项目为我的公司提供大量业务,我们使用GitHub回购协议。让我们拿2个,把它们叫做“完全不污染”和“覆盖污染” 我希望我的员工能够在克隆时默认将“TotalyNotConrupting”回购协议克隆到“EvilCorp”文件夹中 行为: 因此,起始结构是: E: └── Work └── Repos E: └── Work └── Repos └── EvilCorp ├── T
E:
└── Work
└── Repos
E:
└── Work
└── Repos
└── EvilCorp
├── TotallyNotPolluting
└── CoveringUpPolluting
E:\Work\Repos
以开始E:\Work\Repos
)E:\Work\Repos\evicorp\totalynots
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命令上运行。选择它作为答案,因为它看起来不太可能。你可以考虑把它标记为正确答案,如果这意味着你绝对正确的路径到你的解决方案。