2017-10-06 266 views
5

的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

回答

3

這裏是我會拿在這種情況下的步驟:

  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

3

當使用「無標籤文件」消息搜索時,第一個結果我得到了所有關於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