比较git commit与提取的目录

时间:2019-01-30 16:57:52

标签: git

我有一个git目录和另一个单独的目录,我在其中提取了所有文件,但没有.git目录

我的问题是:

如何将git目录的特定提交与提取目录中的文件进行比较?

编辑:

  1. 我知道提交哈希
  2. 我无法执行git checkout,因为我想保持git目录不变
  3. 我有一棵大的git树,我需要尽可能快地进行diff
  4. git目录不一定签出到特定的提交。

3 个答案:

答案 0 :(得分:3)

您可以暂时(仅在git diff命令本身期间)覆盖Git的工作树所在的 where 概念:

git --work-tree=<path-to-tree> diff <commit>

或者等效地,从该路径开始:

git --git-dir=<path-to-.git-directory> diff <commit>

(使用.作为工作树路径,同时从给定的.git目录获取提交)。

使用最方便的一种。甚至可能同时使用两个选项。特别是,对于--git-dir=path,除非您也指定--work-tree=top-of-work-tree,否则Git将假定当前工作目录是工作树的顶层。一个或两个路径可能是相对于当前工作目录的。

(这全部也可以与git diff-treegit diff-indexgit diff-files一起使用,尽管对于脚本而言,git diff-tree和对于个人而言,git diff可能最有用用法。)

答案 1 :(得分:1)

我看到的最快的方法是建立到.git目录的软链接并执行git diff <commit-SHA-1>

假设现有的Git存储库位于目录A中,而提取的文件位于目录B中,则可以执行以下操作:

cd B
ln -s ../A/.git
git diff <commit-SHA-1>

警告:请勿执行任何可修改B中.git内容的提交或操作,因为您可能会在此过程中损坏A。或者也许不会破坏它,但是无论如何,您在B中所做的任何事情都会影响Git在A中看到的内容。

答案 2 :(得分:0)

您可以签出所需的提交,这会将工作树更新为代码库历史记录此时文件所在的状态:

git checkout <commit-SHA-1>

如果您不知道特定的SHA-1哈希,可以在日志(git log)中找到它。

这样,您将能够顺序签出不同的提交,并将每个提交与您不变的单独版本进行比较。