如何在gitlab存储库中下载单个文件夹或文件

如何在gitlab存储库中下载单个文件夹或文件,git,copy,repository,clone,gitlab,Git,Copy,Repository,Clone,Gitlab,我有一个存储库。在此存储库中,有多个文件夹可用 我只需要此存储库中的一个文件夹 我已经尝试执行命令,但它不起作用 git克隆 使用从1.7.0版开始提供的 如果只对该文件夹的内容感兴趣,而不是它的历史记录,那么您可以,因为Git Lab 1.11 2019年5月只下载一个文件夹 下载存储库中目录的存档 根据项目类型及其规模,下载整个项目的档案可能会很慢或毫无帮助,尤其是在大型MonoRepo的情况下 在GitLab 11.11中,您现在可以下载当前目录(包括子目录)内容的存档,以便只下载所需的文

我有一个存储库。在此存储库中,有多个文件夹可用

我只需要此存储库中的一个文件夹

我已经尝试执行命令,但它不起作用

git克隆

使用从1.7.0版开始提供的


如果只对该文件夹的内容感兴趣,而不是它的历史记录,那么您可以,因为Git Lab 1.11 2019年5月只下载一个文件夹

下载存储库中目录的存档 根据项目类型及其规模,下载整个项目的档案可能会很慢或毫无帮助,尤其是在大型MonoRepo的情况下

在GitLab 11.11中,您现在可以下载当前目录(包括子目录)内容的存档,以便只下载所需的文件


From:参见。

这里有一段非常不完美的sh代码,可以使用我编写的GiLab'aapi从repo获取文件或整个目录。如果您觉得它有用,请享受:

#!/bin/sh

GITLAB_API_URL=https://gitlab.com/api/v4
GITLAB_TOKEN=<YOUR TOKEN>
PROJECT=path/to/gitlab/project

PROJECT_ENC=$(echo -n ${PROJECT} | jq -sRr @uri)

function fetchFile() {
  FILE=$1
  FILE_ENC=$(echo -n ${FILE} | jq -sRr @uri)

  curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "${GITLAB_API_URL}/projects/${PROJECT_ENC}/repository/files/${FILE_ENC}?ref=master" -o /tmp/file.info
  if [ "$(dirname $FILE)" != "." ]; then
    mkdir -p $(dirname $FILE)
  fi
  cat /tmp/file.info | jq -r '.content' | tr -d "\n" | jq -sRr '@base64d' > $FILE
  rm /tmp/file.info
}

function fetchDir() {
  DIR=$1
  FILES=$(curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "${GITLAB_API_URL}/projects/${PROJECT_ENC}/repository/tree?ref=master&per_page=100&recursive=true&path=${DIR}" | jq -r '.[] | select(.type == "blob") | .path')
  for FILE in $FILES; do
    fetchFile $FILE
  done
}

fetchDir <REPO_DIR_TO_FETCH>
它使用curl和至少1.6版

如果目录中的文件超过100个,请小心,因为上面的fetchDir函数只获取100个文件。要使它始终工作,您应该在那里添加一些循环。

多亏了。我在Powershell中需要这个来获取maven项目中的版本。此函数用于下载pom.xml并查找版本标记。我把它贴在这里,以防其他人需要它

例如,可以这样调用此函数:

$version=gitlabFetchVersion集成/$appname主机


}

论坛主题可能重复:似乎没有办法从Gitlab GUI执行此操作-Github中似乎有更多的支持,请注意,它也会下载所有存储库历史记录内容。我们可以使用curl或wget下载吗?@Ashwani还没有:接下来是
function gitlabFetchVersion {
  Add-Type -AssemblyName System.Web
  #$project = "integration/ssys-integration"
  $project = $($args[0])
  $project_enc = [System.Web.HTTPUtility]::UrlEncode($project)
  $file="pom.xml"
  $branch=$($args[1])
  $GITLAB_API_URL="https://git.infosynergi.no/api/v4"
  $GITLAB_TOKEN="XXXXXXX"
  $file_enc=[System.Web.HTTPUtility]::UrlEncode($file)
  $headers = @{
    Authorization = $GITLAB_TOKEN
    Accept        = "application/json"
  }

  $url = $GITLAB_API_URL + "/projects/" + $project_enc + "/repository/files/" + $file_enc + "?ref="+$branch
  $pom64 = Invoke-RestMethod -Method Get -Headers @{ 'PRIVATE-TOKEN'='qPxLx5Hk5cB4HLgbVDsQ' } -Uri $url
  $xml = [xml]([System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($pom64.content)))
  $pversion = $xml.project.version
  Write-Host "Version: " $pversion   
  return $pversion