我正在寻找一种克隆git存储库的方法,例如来自GitHub,并在下载的文件夹结构中包含所有者或组织。
例如,从当前文件夹中的组织angular-cli
克隆存储库angular
时,我希望它在当前的工作目录angular/angular-cli
中将其克隆。 / p>
我曾尝试使用Google搜索解决方案,但找不到解决方案,因为基本上所有结果都告诉我如何克隆存储库。当然可以,但是我希望有一些工具可以帮助我自动化该过程。也许是bash或powershell脚本,甚至直接内置到git中。
编辑:与另一个问题相反,我正在寻找一种工具,该工具可根据源自动将存储库放置在正确的文件夹结构中,例如Github,以及用户/组织,例如角度的。
答案 0 :(得分:0)
自己在Powershell中构建解决方案。您可以通过名称和用于解析URL并为存储库构建相应路径的正则表达式配置不同的Git提供程序。
<#
.DESCRIPTION
Clone git repositories including the project/user/organization/... folder structure
#>
Param(
[parameter(Mandatory = $true)]
[String]
$Url
)
#------------------------------------------------------------------------------
# Configuration of available providers
#------------------------------------------------------------------------------
$GitProviders = @{
"Azure" = {
if ($args[0] -Match "https://(?:\w+@)?dev.azure.com/(?<Organization>\w+)/(?<Project>\w+)/_git/(?<Repository>[\w-_]+)") {
return [io.path]::Combine($Matches.Organization, $Matches.Project, $Matches.Repository)
}
}
"GitHub" = {
if ($args[0] -Match "https://github\.com/(?<UserOrOrganization>\w+)/(?<Repository>[\w-_]+)\.git") {
return [io.path]::Combine($Matches.UserOrOrganization, $Matches.Repository)
}
}
}
#------------------------------------------------------------------------------
# Find the right provider and clone the repository
#------------------------------------------------------------------------------
$Match = $GitProviders.GetEnumerator() |
Select-Object @{n = "Provider"; e = {$_.Key}}, @{n = "Path"; e = {$_.Value.invoke($Url)}} |
Where-Object { $_.Path -ne $null } |
Select-Object -First 1
if ($Match) {
Write-Host "Found match for provider: $($Match.Provider)"
if ($Global:ProjectsDir) {
$TargetDirectory = [io.path]::Combine($Global:ProjectsDir, $Match.Provider, $Match.Path)
}
else {
Write-Error "No projects directory configured. Aborting."
}
git clone $Url $TargetDirectory
}
else {
Write-Error "No match found for repository url: $Url"
}
答案 1 :(得分:0)
我刚刚开始使用git,想知道同样的事情。我想出了这个用于bash:
gitclone(){ gitstrip="${1#*//}"; gitpath="${gitstrip#*/}"; git clone $1 ${gitpath%.git};}
我希望它能与子模块一起使用。这些是我的测试用例:
https://gitlab.com/sane-project/frontend/xsane.git
https://gitlab.com/sane-project/frontend/xsane
https://gitlab.com/sane-project/backends.git
https://gitlab.com/sane-project/backends
这似乎可行,但是我没有对它们进行测试。