的Git从“git的差异”命令

问题描述:

的Git版本的Windows“无标签文件”回应:2.14.2.2的Git从“git的差异”命令

每当我上运行的仓库git diff我迎接响应No tags file。我曾尝试在多个存储库,多个控制台(Cmd,PowerShell,MINGW64,Visual Studio命令提示符)上运行该命令,并且都具有相同的响应。

No tags file

奇怪的是,git log命令也将失败。但是,许多其他命令也可以使用,例如git status,git pull等。它似乎只有logdiff

Working commands

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

该命令的一些部分执行正确的,因为如果我提供两个提交散列和我故意破一个时,收到的响应是:

Bad Response

好像另一个程序可以是劫持git diff命令。我相信这是因为我不确定“无标签文件”甚至是可能的Git响应。不知道还有什么。

为了让事情变得更加令人困惑 - 我的最终目标是在msbuild的范围内运行git diff,并且它执行正确。现在,我可以对此感到满意,但我需要稍微修改diff命令,并且每次运行完整版本都不会高效,也不容易排除故障。构建脚本中有一项任务运行Exec命令,并且在执行diff时没有问题。我也能够在SourceTree中执行Diff Against Current,据我所知,在幕后运行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> 

输出:

的命令中的每一个上面返回相同No tags file响应,在所有我的回购。

猫头:

cd .git 
cat HEAD 
ls -R refs 

输出:

CatHead

新回购:

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 

输出:

NewRepo

混帐配置-e:

gitconfige

混帐配置--global -e:

gitconfigglobale

::编辑2 ::

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

我也回顾了我的所有路径变量:git,vim,ming,mintty和其他任何似乎有嫌疑但没有找到的东西。

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

::编辑3 ::

我有我的笔记本电脑不同的用户,切换到用户和git diff正常工作,因此显然有一些与我的主要用户是相互矛盾的。将继续查看我的User目录中的问题。

+0

您是否尝试过'git的差异HEAD'? –

+1

@jrap在对您的编辑进行了一点思考后 - 我很好奇您的工具如何进行差异或日志记录。你有什么目录安装git,并且是那些使用同一个目录的工具?这几乎就像他们正在使用一个不同的。你可能想尝试安装Git扩展,看看它是否可以做差异 - 我知道它使用已安装的Git文件夹 - 事实上,你必须将其指向该文件夹(通常)。 – LightCC

+1

当搜索到“无标签文件”消息时,第一个结果是“vi”。我不明白为什么'git'会在运行'git diff'或'git log'的时候尝试执行'vi',可能是因为你的系统被配置为使用'vi'作为传呼机? – LeGEC

这里是我会拿在这种情况下的步骤:

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

    git diff HEAD~1 HEAD 
    git diff master~1 master 
    git diff <commit-hash-1> <commit-hash-2> 
    
  2. 尝试用相同的日志:

    git log HEAD~1..HEAD 
    git log master~1..master 
    git log <commit-hash-1>..<commit-hash-2> 
    

    我实际上猜测你的裁判是搞砸了,这意味着直接哈希可能工作,但是HEAD和/或master可能不会。

  3. 查找到.git/refs文件夹

    从主要回购文件夹:

    cd .git 
    cat HEAD 
    ls -R refs 
    

    希望HEAD指向一个分支,如果master被检查出来,cat HEAD输出应看起来像:

    ref: refs/heads/master 
    

    然后,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 
    

    如果这最后一个工作,然后git可能工作正常,但你有一些工具是搞砸了。

  5. git config -egit config --global -e发布您的配置 - 也许我们可以看到什么?

+0

我已经更新了我提出的问题,并提供了您提出的所有问题的输出。仍然没有运气,但希望有更多的信息可以帮助。 – jrap

+0

哇,这会变得更加怪异和怪异 - 即使是新的回购也会给log和diff提供相同的'No tags file'响应。不幸的是,我没有任何使用Sourcetree作为工具的经验,但我会开始寻找那里或者其他已安装的工具。我甚至可能会去卸载SCM和Git相关的所有东西,然后尝试全新安装Git,然后重试一个测试回购。 – LightCC

+0

很快就没有想法了。我试着用我创建的测试回放,用便携式exe文件,我仍然得到相同的回应。我还检查了我的'%LOCALAPPDATA%'目录中的任何可疑内容,但没有发现任何明显的内容。 – jrap

当使用“无标签文件”消息搜索时,第一个结果我得到了所有关于vi的讨论。

我不明白为什么运行git diffgit loggit将尝试执行vi,那也许是因为你的系统配置为使用vi寻呼机?

# some possible places which could influence that : 
echo $PAGER 
echo $GIT_PAGER 
git config --get core.pager 

less文档中挖,我发现less可以使用ctags文件,以发现“包含此标记的文件”。

所以,你也可以看看影响的less行为的变量列表:

# from bash : 

# env will list all the defined environment variables 
env 

# the ones that impact 'less' should contain "LESS" in their names : 
env | grep LESS 
+0

似乎没有任何用处。在这里登录:https://www.screencast.com/t/l31mPF7Peg4 – jrap

+0

@jrap:你从Windows cmd.exe shell中运行它。从'git bash'(从你运行'git diff'或'git log'的地方来看) – LeGEC

+0

bash的输出:https://www.screencast.com/t/qKDTWAvAV – jrap