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等这似乎是唯一的log和diff.
我完全卸载了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)
输出:
git config -e:
git config --global -e:
::编辑2 ::
我卸载了所有的差异/源代码控制工具(SourceTree,Git,SVN,WinMerge,KDiff).安装了便携版Git.打开CMD到一个repo,放入git.exe便携式的完整路径,它仍然返回No tags file响应.
我还审查了我的所有路径变量:git,vim,ming,mintty以及其他任何看似可疑的东西,但没有发现任何变量.
我在执行所有步骤后重新启动,但问题仍然存在.
::编辑3 ::
我的笔记本电脑上有不同的用户,切换到该用户并且git diff工作正常,所以很明显我的主要用户存在冲突.将继续查看我的User目录中的问题.
以下是在这种情况下我会采取的步骤:
请尝试以下操作并检查响应:
Run Code Online (Sandbox Code Playgroud)git diff HEAD~1 HEAD git diff master~1 master git diff <commit-hash-1> <commit-hash-2>
对日志进行同样的尝试:
Run Code Online (Sandbox Code Playgroud)git log HEAD~1..HEAD git log master~1..master git log <commit-hash-1>..<commit-hash-2>
我实际上猜测你的参考被搞乱了,这意味着直接哈希可能有效,但和HEAD/或master可能无效。
进入.git/refs文件夹查看
从主存储库文件夹:
Run Code Online (Sandbox Code Playgroud)cd .git cat HEAD ls -R refs
希望HEAD指向一个分支,如果master签出,cat HEAD输出应如下所示:
Run Code Online (Sandbox Code Playgroud)ref: refs/heads/master
然后,ls -R refs应该显示一个heads文件夹,其中包含每个本地分支(即master可能还有其他分支)的文件。您可能还拥有refs/remotes和refs/tags目录。
如果这些东西中的任何一个完全不同或缺失,那可能是你的问题......
由于您已经重新安装了 git,因此创建一个全新的存储库并尝试相同的命令:
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
如果最后一个有效,那么 git 可能工作正常,但你拥有的某些工具却把事情搞砸了。
发布你的配置-git config -e也许git config --global -e我们可以看到一些东西?
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |