Git for Windows"No tags file"响应来自"git diff"命令

jra*_*rap 5 windows git msbuild git-diff atlassian-sourcetree

Git版本:2.14.2.2

每当我git diff在存储库上运行时,我都会收到响应No tags file.我已经尝试在多个存储库,多个控制台(Cmd,PowerShell,MINGW64,Visual Studio命令提示符)上运行该命令,并且所有控制台都具有相同的响应.

没有标签文件

奇怪的是,git log命令也失败了.许多其他命令的工作,然而,如git status,git pull等这似乎是唯一的logdiff.

工作指令

我完全卸载了Git并重新安装.重启我的系统.尝试git.exe直接引用(产生完全相同的响应).没有什么工作,我没有在其他地方看到这个错误.我将用户配置与同事的配置进行了比较,它们完全相同.

命令的某些部分正确执行,因为如果我提供两个提交哈希,并且我故意破坏一个,我收到的响应是:

不良反应

似乎另一个程序可能正在劫持git diff命令.我相信这是因为我不确定"没有标签文件"甚至是可能的Git响应.不确定它会是什么.

为了让事情变得更加混乱 - 我的最终目标是git diff在一个环境中运行msbuild并且它执行得非常正确.现在,我对此感到满意,但我需要diff稍微修改命令,每次运行完整的构建都没有效率,也不容易排除故障.构建脚本中有一个运行Exec命令的任务,它没有执行任何问题diff.我也能够Diff Against Current在SourceTree中执行,据我所知,它git diff在幕后运行.

任何帮助将非常感谢.

::编辑::

各种命令:

git diff HEAD~1 HEAD
git diff master~1 master
git diff <commit-hash-1> <commit-hash-2>
git log HEAD~1..HEAD
git log master~1..master
git log <commit-hash-1>..<commit-hash-2>
Run Code Online (Sandbox Code Playgroud)

输出:

上述每个命令No tags file都会在我的所有回购中返回相同的响应.

猫头:

cd .git
cat HEAD
ls -R refs
Run Code Online (Sandbox Code Playgroud)

输出:

猫头

新回购:

mkdir testrepo
cd testrepo
git init
echo "file1" > file1.txt
git add .
git commit -m "initial commit of file1.txt"
echo "Hi there!" > file2.txt
git add .
git commit -m "added file2.txt"
git log
git diff HEAD~1 HEAD
Run Code Online (Sandbox Code Playgroud)

输出:

NewRepo

git config -e:

gitconfige

git config --global -e:

gitconfigglobale

::编辑2 ::

我卸载了所有的差异/源代码控制工具(SourceTree,Git,SVN,WinMerge,KDiff).安装了便携版Git.打开CMD到一个repo,放入git.exe便携式的完整路径,它仍然返回No tags file响应.

我还审查了我的所有路径变量:git,vim,ming,mintty以及其他任何看似可疑的东西,但没有发现任何变量.

我在执行所有步骤后重新启动,但问题仍然存在.

::编辑3 ::

我的笔记本电脑上有不同的用户,切换到该用户并且git diff工作正常,所以很明显我的主要用户存在冲突.将继续查看我的User目录中的问题.

Lig*_*tCC 3

以下是在这种情况下我会采取的步骤:

  1. 请尝试以下操作并检查响应:

    git diff HEAD~1 HEAD
    git diff master~1 master
    git diff <commit-hash-1> <commit-hash-2>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 对日志进行同样的尝试:

    git log HEAD~1..HEAD
    git log master~1..master
    git log <commit-hash-1>..<commit-hash-2>
    
    Run Code Online (Sandbox Code Playgroud)

    我实际上猜测你的参考被搞乱了,这意味着直接哈希可能有效,但和HEAD/或master可能无效。

  3. 进入.git/refs文件夹查看

    从主存储库文件夹:

    cd .git
    cat HEAD
    ls -R refs
    
    Run Code Online (Sandbox Code Playgroud)

    希望HEAD指向一个分支,如果master签出,cat HEAD输出应如下所示:

    ref: refs/heads/master
    
    Run Code Online (Sandbox Code Playgroud)

    然后,ls -R refs应该显示一个heads文件夹,其中包含每个本地分支(即master可能还有其他分支)的文件。您可能还拥有refs/remotesrefs/tags目录。

    如果这些东西中的任何一个完全不同或缺失,那可能是你的问题......

  4. 由于您已经重新安装了 git,因此创建一个全新的存储库并尝试相同的命令:

    mkdir testrepo
    cd testrepo
    git init
    echo "file1" > file1.txt
    git add .
    git commit -m "initial commit of file1.txt"
    echo "Hi there!" > file2.txt
    git add .
    git commit -m "added file2.txt"
    git log
    git diff HEAD~1 HEAD
    
    Run Code Online (Sandbox Code Playgroud)

    如果最后一个有效,那么 git 可能工作正常,但你拥有的某些工具却把事情搞砸了。

  5. 发布你的配置-git config -e也许git config --global -e我们可以看到一些东西?