从远程git存储库获取单个文件内容的最有效机制(就传输的数据和使用的磁盘空间而言)是什么?
到目前为止,我已经想出了:
git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
这似乎还是有些过分。
从回购中获取多个文件呢?
从远程git存储库获取单个文件内容的最有效机制(就传输的数据和使用的磁盘空间而言)是什么?
到目前为止,我已经想出了:
git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
这似乎还是有些过分。
从回购中获取多个文件呢?
当前回答
如果您不介意克隆整个目录,这个小bash/zsh函数的最终结果是将单个文件克隆到当前目录中(通过将repo克隆到临时目录中,然后删除它)。
正方:你只能得到你想要的文件
缺点:你仍然需要等待整个回购复制
git-single-file () {
if [ $# -lt 2 ]
then
echo "Usage: $0 <repo url> <file path>"
return
fi
TEMP_DIR=$(mktemp -d)
git clone $1 $TEMP_DIR
cp $TEMP_DIR/$2 .
rm -rf $TEMP_DIR
}
其他回答
Github企业解决方案
HTTPS_DOMAIN=https://git.your-company.com
ORGANISATION=org
REPO_NAME=my-amazing-library
FILE_PATH=path/to/some/file
BRANCH=develop
GITHUB_PERSONAL_ACCESS_TOKEN=<your-access-token>
URL="${HTTPS_DOMAIN}/raw/${ORGANISATION}/${REPO_NAME}/${BRANCH}/${FILE_PATH}"
curl -H "Authorization: token ${GITHUB_PERSONAL_ACCESS_TOKEN}" ${URL} > "${FILE_PATH}"
如果你想从一个特定的散列+远程存储库中获取一个文件,我尝试过git-archive,但它不起作用。
你必须使用git克隆,一旦存储库克隆出来,你就必须使用git-archive来让它工作。
我发布了一个关于如何从远程的特定哈希在git存档中更简单地做到这一点的问题
Yisrael Dov的答案很简单,但它不允许压缩。您可以使用——format=zip,但不能像使用tar一样使用管道命令直接解压缩,因此需要将其保存为临时文件。这是一个脚本:
#!/bin/bash
BASENAME=$0
function usage {
echo "usage: $BASENAME <remote-repo> <file> ..."
exit 1
}
[ 2 -gt "$#" ] && { usage; }
REPO=$1
shift
FILES=$@
TMPFILE=`mktemp`.zip
git archive -9 --remote=$REPO HEAD $FILES -o $TMPFILE
unzip $TMPFILE
rm $TMPFILE
这也适用于目录。
我使用curl,它与公共回购或通过web界面使用https基本身份验证的人一起工作。
curl -L——retry 20——retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD
我在github和bitbucket上进行了测试,两者都适用。
我是这样解决的:
git archive --remote=ssh://git@gitlab.com/user/mi-repo.git BranchName /path-to-file/file_name | tar -xO /path-to-file/file_name > /path-to-save-the-file/file_name
如果你愿意,你可以用"BranchName"代替"HEAD"