【问题标题】:git clone, ignoring a directorygit clone,忽略目录
【发布时间】:2013-01-14 20:47:08
【问题描述】:

我正在尝试在 wordpress 安装上测试一些东西。在这样做时,我想快速复制回购。但是上传目录(wp-content/uploads)很大,所以我想忽略它。

注意:我不想一直 .gitignore 这个目录,只是为了这个场景。

基本上,我想要一个类似这样的伪代码的命令:git clone --ignore wp-content/uploads

将该目录添加到 .gitignore、克隆然后还原 .gitignore 的最佳方法是什么?还是有更好的方法?

【问题讨论】:

标签: git


【解决方案1】:

聚会有点晚了,但是:您不想结帐吗?

mkdir <repo> && cd <repo>
git init
git remote add –f <name> <url>

启用稀疏结帐:

git config core.sparsecheckout true

通过在 .git/info/sparse-checkout 中列出所需的子树来配置 sparse-checkout:

echo some/dir/ >> .git/info/sparse-checkout
echo another/sub/tree >> .git/info/sparse-checkout

从远程结帐:

git pull <remote> <branch>

请参阅http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/ 了解更多信息。

【讨论】:

  • 这仍然会获取所有内容,即使只有命名的目录/文件被检出到本地沙箱中。
  • 你这个天才,我从没想过这能解决我的问题。
【解决方案2】:

git clone 将始终克隆 complete 存储库*,包括所有以前添加到存储库的提交。因此,即使您暂时删除文件,然后克隆它,您仍然会收到包含这些文件的旧版本。

此外,仅编辑 .gitignore 不会从存储库中删除跟踪的文件,即使它们通常会被忽略。

所以不,在克隆过程中确实不可能跳过某个文件夹。

*可以限制克隆期间检索到的提交数量,但这不会使存储库非常可用。

【讨论】:

    【解决方案3】:

    您可以指定要克隆的深度(--depth=1 仅获得 1 次提交)。您可能希望设置一个缺少此目录的分支,然后仅以 1 的深度进行克隆。由于 git 是基于快照的,因此在克隆时排除提交的一部分并不容易。这是最接近您想要的。

    如果您对此 repo 有完全控制权,您可能希望创建此目录的子模块,并且仅在您想管理该部分时才更新子模块。

    【讨论】:

    • 这非常适合 CI 构建!
    【解决方案4】:

    在服务器上:

     git checkout master^0    # the ^0 checks out the commit itself, not the branch
     git filter-branch --tree-filter 'git rm -r wp-content/uploads' HEAD
     git checkout -b filtered
    

    (这里的一个大项目的过滤器分支以每秒大约 2-3 次提交的速度生成新的历史记录)

    然后,随心所欲,

     git init
     git remote add gimme your://repo/path
     git fetch gimme filtered
    

    编辑:根据http://git-scm.com/docs/git-filter-branch修复语法错误

    【讨论】:

    • 由于某种原因,上面的filter-branch 命令有时会起作用,有时会失败,并出现“以下文件已在索引中暂存更改”的错误。此外,如果每次提交中都不存在给定路径,它将失败(在这种情况下,您似乎需要git rm --ignore-unmatch。)但更快的替代方法是使用--index-filtergit rm --cachedgit filter-branch --index-filter 'git rm --cached --ignore-unmatch -q -r wp-content/uploads' HEAD跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2014-11-01
    • 2012-11-15
    相关资源
    最近更新 更多