我有一个git目录和另一个单独的目录,我在其中提取了所有文件,但没有.git目录
我的问题是:
如何将git目录的特定提交与提取目录中的文件进行比较?
编辑:
答案 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-tree
,git diff-index
和git 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
)中找到它。
这样,您将能够顺序签出不同的提交,并将每个提交与您不变的单独版本进行比较。