例如,您可以制作跟踪文件的可靠副本。比您在跟踪版本上进行一些更改。我希望找到哪个提交最接近,甚至可能是相同的,是我复制文件的存储库中未跟踪的文件版本。它甚至可能吗?
我知道最好的方法是让文件/存储库的副本包含自己的git历史记录。但在这种情况下,它是不可能的。
有关信息,可以使用相同的工作树和文件名。
答案 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