的Git从“git的差异”命令
的Git版本的Windows“无标签文件”回应:2.14.2.2的Git从“git的差异”命令
每当我上运行的仓库git diff
我迎接响应No tags file
。我曾尝试在多个存储库,多个控制台(Cmd,PowerShell,MINGW64,Visual Studio命令提示符)上运行该命令,并且都具有相同的响应。
奇怪的是,git log
命令也将失败。但是,许多其他命令也可以使用,例如git status
,git pull
等。它似乎只有log
和diff
。
我已经完全卸载Git和重新安装。重新启动我的系统。试图直接引用git.exe
(这产生完全相同的响应)。没有任何工作,我没有在其他地方看到这个错误。我将我的用户配置与同事的配置进行了比较,它们是相同的。
该命令的一些部分执行正确的,因为如果我提供两个提交散列和我故意破一个时,收到的响应是:
好像另一个程序可以是劫持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
输出:
新回购:
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
输出:
混帐配置-e:
混帐配置--global -e:
::编辑2 ::
我卸载所有我的差异/源代码控制工具(SourceTree,Git,SVN,WinMer ge,KDiff)。安装了Git的便携版本。打开CMD到回购站,放入git.exe便携式的完整路径,它仍然返回No tags file
响应。
我也回顾了我的所有路径变量:git,vim,ming,mintty和其他任何似乎有嫌疑但没有找到的东西。
我在执行所有步骤后重新启动,但问题仍然存在。
::编辑3 ::
我有我的笔记本电脑不同的用户,切换到用户和git diff
正常工作,因此显然有一些与我的主要用户是相互矛盾的。将继续查看我的User
目录中的问题。
这里是我会拿在这种情况下的步骤:
-
尝试以下操作和检查响应:
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>
我实际上猜测你的裁判是搞砸了,这意味着直接哈希可能工作,但是
HEAD
和/或master
可能不会。 -
查找到
.git/refs
文件夹从主要回购文件夹:
cd .git cat HEAD ls -R refs
希望
HEAD
指向一个分支,如果master
被检查出来,cat HEAD
输出应看起来像:ref: refs/heads/master
然后,
ls -R refs
,应该表现出heads
文件夹,与您的每一个地方分支机构的文件(即master
和其他可能的)。您也可能有refs/remotes
和refs/tags
目录。如果任何这些东西是完全不同或缺失,这可能是你的问题......
-
既然你已经重新安装的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可能工作正常,但你有一些工具是搞砸了。
从
git config -e
和git config --global -e
发布您的配置 - 也许我们可以看到什么?
我已经更新了我提出的问题,并提供了您提出的所有问题的输出。仍然没有运气,但希望有更多的信息可以帮助。 – jrap
哇,这会变得更加怪异和怪异 - 即使是新的回购也会给log和diff提供相同的'No tags file'响应。不幸的是,我没有任何使用Sourcetree作为工具的经验,但我会开始寻找那里或者其他已安装的工具。我甚至可能会去卸载SCM和Git相关的所有东西,然后尝试全新安装Git,然后重试一个测试回购。 – LightCC
很快就没有想法了。我试着用我创建的测试回放,用便携式exe文件,我仍然得到相同的回应。我还检查了我的'%LOCALAPPDATA%'目录中的任何可疑内容,但没有发现任何明显的内容。 – jrap
当使用“无标签文件”消息搜索时,第一个结果我得到了所有关于vi
的讨论。
我不明白为什么运行git diff
或git log
时git
将尝试执行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
您是否尝试过'git的差异HEAD'? –
@jrap在对您的编辑进行了一点思考后 - 我很好奇您的工具如何进行差异或日志记录。你有什么目录安装git,并且是那些使用同一个目录的工具?这几乎就像他们正在使用一个不同的。你可能想尝试安装Git扩展,看看它是否可以做差异 - 我知道它使用已安装的Git文件夹 - 事实上,你必须将其指向该文件夹(通常)。 – LightCC
当搜索到“无标签文件”消息时,第一个结果是“vi”。我不明白为什么'git'会在运行'git diff'或'git log'的时候尝试执行'vi',可能是因为你的系统被配置为使用'vi'作为传呼机? – LeGEC