如何在不克隆整个仓库的情况下从 GitHub 检出单个文件?

8

在一个生产环境中,我想要从GitHub检出一个特定版本的文件以方便数据库迁移。我不想检出(甚至克隆)整个源代码仓库(因为这是我的生产环境)。我该如何只拉取我需要的文件?


2
已经确定解决方案: https://dev59.com/fHRB5IYBdhLWcg3weXOX https://dev59.com/mXRB5IYBdhLWcg3wLk1M https://dev59.com/Amw15IYBdhLWcg3wfb3i https://dev59.com/xHNA5IYBdhLWcg3wBo5m - fuzzyalej
1
以上所有内容大多数都不相关,除了https://dev59.com/xHNA5IYBdhLWcg3wBo5m,但不幸的是你不能在GitHub上使用“--remote=<repo>”(http://groups.google.com/group/github/browse_thread/thread/cfcbcb1dc5f41f16)。 - Niel de Wet
3个回答

11

我用以下方式为骨架创建循环

curl -O https://raw.github.com/documentcloud/backbone/master/backbone-min.js

4
我的解决方案与第一篇帖子中的类似。但我会尝试更详细地解释一下。 GitHub上每个文件都有一个“Raw”按钮-它将在浏览器中显示纯文本。此外,您可以使用该URL。
例如,我有一个repo https://github.com/MasterSergius/conf_files.git 我想获取我的.vimrc文件,因此这里是我的文件链接: https://raw.githubusercontent.com/MasterSergius/conf_files/master/.vimrc 我认为,通过这个模板,您甚至可以猜出存储库和文件完整路径名的文件URL。 所以,现在我可以使用curl下载它:
curl https://raw.githubusercontent.com/MasterSergius/conf_files/master/.vimrc -o ~/.vimrc

1
这对我很有帮助,谢谢!我还更深入地了解了CURL,如果你用-O替换-o标志,它将使用来自服务器的文件名,而无需显式指定本地文件名,但代价是必须从目标文件夹内运行命令。你也可以使用文件名中的{thing1,thing2,etc}迭代多个文件。通过这两个选项,我能够非常快速地下载一组CSV种子数据文件,以供课程项目使用。 - joequincy

3
据我所知,从通过http提供的git存储库下载单个文件目前是不可能的。我相信GitHub有一个单独的“下载”功能,他们希望人们使用它来代替(但我不知道它是否支持下载单个文件)。
解决方法是克隆整个存储库(!),然后获取感兴趣的文件。这里有一个可以完成工作的bash函数:
git-cat() {
    if  [ -z "$1" -o -z "$2" ]; then
        echo "Usage: git-cat REPO_URL FILE [BRANCH]"
        exit 1
    fi
    tmprepo=`mktemp -d -t gitrepo.XXXXXX`
    reponame=$1
    filename=$2
    branchname=$3
    if [ -z "$branchname" ]; then
        branchname="master"
    fi
    git clone -nq $reponame $tmprepo &&
    git --git-dir $tmprepo/.git show ${branchname}:${filename} &&
    rm -rf $tmprepo
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接