【问题标题】:git-retrieve single file from repositorygit-从存储库中检索单个文件
【发布时间】:2016-05-19 22:46:07
【问题描述】:

从存储库中检索单个文件。

我有一个包含 10 个目录/一些文件和 pom.xml 的存储库以及一个名为 pom.xml 的文件(在目录之外)。所以我需要从该存储库中检索一个带有历史记录的 pom.xml。这里的一个问题是 pom.xml 在所有 10 个目录中。当我尝试使用 git filter-branch -f --prune-empty --index-filter 'git rm --cached --ignore-unmatch $(git ls -files | grep -v "pom.xml")',此命令检索目录中的所有 pom.xml,包括 pom.xml。你能帮我检索除 pom.xml 之外的目录中的 pom.xml。

【问题讨论】:

  • 听起来像是一个奇怪的用例。为什么不能获取整个仓库?
  • 我可以获得整个存储库。但我只需要一个位于目录之外的 pom.xml。问题是我在所有这些目录中还有其他 10 个目录,我有 pom.xml 和其他文件。
  • 如果您可以获得整个存储库并且您只需要一个文件,那么通常(并且通常是正确的)过程是获取整个存储库,然后仅使用其中的适当文件。这对于 pom 尤其重要,因为依赖关系可能非常复杂:仅仅因为您认为您现在只需要一个 pom 并不意味着有一天您将需要全部十个。
  • 好吧,正如你所说,我得到了整个存储库。到目前为止,我想获得一个不在目录中的 pom。我需要一个不在目录中的 pom。所以如果有任何可能请告诉我。
  • git filter-branch -f --prune-empty --index-filter 'git rm --cached --ignore-unmatch $(git ls-files | grep -v "pom.xml" )' 我尝试过这种方式。它也获取了目录中的所有 pom.xml。

标签: git github gitlab


【解决方案1】:
git branch just-pom
git filter-branch --index-filter '
                git read-tree --empty; git reset $GIT_COMMIT path/to/pom.xml
        ' -- just-pom --full-history -- path/to/pom.xml

这将保留有关该文件历史的所有内容。最后一行 -- 之后的所有内容都是 git rev-list 的 args,您可以在此处准确选择哪些提交提供您正在构建的历史记录。

【讨论】:

  • 伟大的 jthill。感谢您的命令。它工作得很好。真棒
  • 我对你给 just-pom 的上述命令有一个小问题。这就是为什么我们需要给 --just-pom in '-- just-pom --full-history -- path/to /pom.xml' 它是一个分支名称@jthill
  • 这限制了过滤器分支将重写的内容。
猜你喜欢
  • 2010-11-10
  • 2018-12-07
  • 2011-10-21
  • 2011-04-08
  • 1970-01-01
  • 2015-04-07
  • 2016-12-01
  • 2020-05-28
  • 1970-01-01
相关资源
最近更新 更多