【问题标题】:unable to curl a git tag无法卷曲 git 标签
【发布时间】:2012-12-15 14:18:45
【问题描述】:

我想通过命令行curl一个git标签:

curl -O http://someurl

但是当我尝试解压文件时它坏了?有谁知道问题出在哪里?

【问题讨论】:

    标签: git curl git-tag


    【解决方案1】:

    如果您只需要提取必要的最小值,

    git init temp
    cd temp
    git remote add x http://example.com/repo.git
    git fetch x sometag --depth=1
    git archive FETCH_HEAD > ../repo.sometag.tgz
    cd ..
    rm -rf temp
    

    会的

    【讨论】:

    • 那么,与真正的克隆相比,有什么好处呢?请不要说“节省空间”
    • 他想要一个 tarball,而不是 repo。对于像 linux 或 blender-full 之类的大型项目,这可以节省超过千兆字节的网络流量。 (编辑:
    • 对于这么大的(外国!!!)项目,我希望已经有一个 tarball(或 zip 或其他)可以下载到某个地方......我想它是关于自己的,或者至少是附属的项目,因此一点点努力不会受到伤害。是的,网络可能是,但这取决于您居住的国家/地区:X 在德国,我绝对不会通过移动访问拉回购。哦,别忘了:一旦你克隆了 repo,以后的 pull 只会获取更改 :)
    • 毫无疑问,克隆为您带来主要长期利益。但这确实符合 OP 的具体要求,我不认为秒和分钟之间的差异可以忽略,即使它不太可能发生。
    • 你会把我弄糊涂的……你在说什么?我的最后一个论点只是关于你是否想打包这个“东西”一次,或者经常。但我的主要问题是:与直接简单的git clone 相比,您的解决方案有什么好处? (除了一个节省带宽和空间;))
    【解决方案2】:

    git 本身不提供 http 接口。一个解决方案是改用git archive

    git clone http://example.com/myrepo.git
    git archive mytag > myrepo-mytag.tar.gz
    

    【讨论】:

    • +1。这是一个比我的答案更 git-native 的解决方案。 (虽然它确实涉及 本地 克隆)
    • @VonC 我不认为本地克隆是一个真正的问题,因为您可以随时使用rm -Rf myrepo.git 将其删除。但是我的经验是,这种情况经常发生,因此您可以保留克隆并将其用作本地打包平台:) 迟早有人想要在打包之前运行测试或类似的东西,在这种情况下是源已经可用。
    【解决方案3】:

    您可以从 GitHub 等 git repos 托管服务中 curl 一个 git 标签,因为它有一个提供 tar(或 zip)的 dedicated tarball service(如 Nodeload)。但没有任何其他 git repo 提供相同的服务。

    有关 GitHub 的具体示例,请参阅“Having trouble downloading Git archive tarballs from Private Repo”(或此 curl GitHub tutorial):

    curl -sL --user "${username}:${password}" https://github.com/$account/$repo/tarball/$tag_name > tarball.tar
    

    public repo

    curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx
    

    【讨论】:

    • 你知道如何更改解压文件夹的名称吗?现在是用户名-repo-commithash。有没有办法重命名它?我已经尝试了几种解决方案,但它对我不起作用
    • 我试过curl -L https://github.com/tinganho/yeoman/tarball/v.p1.0.9.0 > yeoman.tar.gz && tar -xvf yeoman.tar.gz -C node_modules
    • @Woho87 不,因为该根目录是此 tar 中包含的元素的一部分(在您的情况下,我怀疑您会得到 node_modules/username-repo-commithash/...)。您需要添加一个额外的步骤来检测最近创建的目录(以${username} 开头),然后重命名它。
    • @Woho87 确定:ls -1t "${username}*"|head -n1
    • @Woho87 也可以 :) 我更喜欢脚本中的中间步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多