【问题标题】:I need to checkout single folder from a Bitbucket Git repo [duplicate]我需要从 Bitbucket Git 存储库中签出单个文件夹 [重复]
【发布时间】:2023-04-09 08:15:01
【问题描述】:

我有一个包含大约 20 个文件夹的存储库,这些文件夹是我从 SVN 转换到 Git 时创建的。是否可以从 Git 存储库(在 Bitbucket 上)签出单个文件夹?还是我必须将这些文件夹中的每一个都设为单独的存储库?

【问题讨论】:

  • 答案是:是的。除非你喜欢跳过(很多)圈子,否则最终得到的解决方案仍然有限
  • 哪个问题?
  • 对“或者我是否必须将这些文件夹中的每一个都设为单独的存储库”。您应该尝试提出一个明确的问题是有原因的 :) 无论如何,我希望我用一种可以在下面的回答中起作用的方法来逗您开心。

标签: git bitbucket


【解决方案1】:

编辑 稀疏结帐基本上可以这样,但更好(请参阅链接问题)。只是,我的回答会注意做一个 shallow 克隆 as well,就像只做稀疏结帐一样。

你可以分两步(嗯,大概)破解它:

  1. 签出浅拷贝

    cd /tmp
    git clone --depth=1 --bare git@myhosted_repo/project.git
    
    (cd project.git && git branch master)
    
  2. 现在 - 设置您的工作树(单独)

    mkdir /tmp/workdir
    cd /tmp/workdir
    git init .
    
    # add the shallow clone as a remote
    git remote add --fetch shallow /tmp/project.git
    
  3. 真正的黑客:

    # read a subtree from the remote, shallow branch
    git read-tree --prefix somedir -u shallow/master:testcases/
    

    (假设您的 repo 有一个名为 testcases 的目录)

您最终会得到一个工作目录,其中仅包含来自 testcases/ 的文件,位于名为 somedir 的子目录中

结果:

  • 它仅从托管存储库中获得一个修订。好(TM)
  • 它只检出该修订版中的单个子文件夹。好(TM)
  • 太神秘了。如果您打算将 somedir 放在其他一些 repo 中,它会特别糟糕(可以进行子树合并,但我不会在那里烧我的手指)

【讨论】:

  • 在 git 分支主步骤上失败。然后 fetch 给出警告:reject refs/remotes/shallow/master 因为不允许更新浅根。另外,致命的:不是有效的对象名称 shallow/master:testcases...
  • @jrosell 当然,浅层克隆有局限性。如果您查看这个问题,您会看到一个浅克隆可能有用的情况示例。你的不是。你可以在你的克隆仓库中取消你的克隆:git fetch --unshallow origin
猜你喜欢
  • 2015-02-24
  • 1970-01-01
  • 2016-07-08
  • 2016-01-23
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
相关资源
最近更新 更多