Git,找到未跟踪文件的跟踪版本?

时间:2016-11-02 13:52:12

标签: git file search version diff

例如,您可以制作跟踪文件的可靠副本。比您在跟踪版本上进行一些更改。我希望找到哪个提交最接近,甚至可能是相同的,是我复制文件的存储库中未跟踪的文件版本。它甚至可能吗?

我知道最好的方法是让文件/存储库的副本包含自己的git历史记录。但在这种情况下,它是不可能的。

有关信息,可以使用相同的工作树和文件名。

2 个答案:

答案 0 :(得分:0)

查找最接近的提交可能并不重要,因为它涉及以某种方式衡量文件与您要比较的提交之间的相似性。

但是如果你的副本与某些提交中的文件完全相同,那么通过文件的提交历史并与你的副本进行比较并不困难。如果你从Git存储库文件夹运行它,如下面的Bash脚本(未经测试)应该可以工作,如:

./compare.sh folder/subfolder/file.c ~/backup/copy-of-file.c

脚本:

#!/bin/bash

TRACKED="$1"
UNTRACKED="$2"

for commit in `git log --format=%H "$1"`; do
    contents="$(git show $commit:"$TRACKED")"
    diff "$UNTRACKED" <(echo "$contents") > /dev/null
    if [ "$?" == 0 ]; then
        echo "$UNTRACKED is the same as commit "$commit""
        exit 0
    fi
done

echo "No exact match found"

答案 1 :(得分:0)

我自己找到了一些可选的解决方案,我不会说它是我将使用的那个,或者它是我拥有的最好的解决方案,但我想在这里分享一下以防万一。

它被称为&#34; 关键字扩展&#34;它所做的就是在文件结账时触发脚本。脚本名为&#34; 涂抹&#34;你可以定义它将做什么,例如将文件的最后10次提交注入标题。 第二个脚本名为&#34; clean &#34;你确定反过来&#34;涂抹&#34;所以git知道他必须在diff中忽略文件的哪一部分。

是的,由于&#34; 干净&#34;,遥控器上没有进行更改,但是每当您结帐时,脚本都会编辑文件你可以拥有修改过的部分。

从这里它给我一些文件的痕迹,以及我不使用git的历史。

这是链接: https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#Keyword-Expansion