2017-10-06 25 views
5

Git phiên bản: 2.14.2.2Git cho Windows "Không có thẻ tập tin" Phản hồi từ "git diff" Command

Bất cứ khi nào tôi chạy git diff vào một kho lưu trữ Tôi chào đón với phản ứng No tags file. Tôi đã thử chạy lệnh trên nhiều kho, nhiều bàn điều khiển (Cmd, PowerShell, MINGW64, Visual Studio Command Prompt) và tất cả đều có cùng một phản hồi.

No tags file

Kỳ lạ thay, lệnh git log cũng thất bại. Tuy nhiên, nhiều lệnh khác hoạt động như git status, git pull, v.v ... Có vẻ như chỉ có logdiff.

Working commands

Tôi đã gỡ cài đặt Git hoàn toàn và cài đặt lại. Khởi động lại hệ thống của tôi. Đã cố gắng tham chiếu trực tiếp git.exe (cho kết quả tương tự). Không có gì đang hoạt động và tôi không thấy lỗi này ở bất kỳ nơi nào khác. Tôi đã so sánh cấu hình người dùng của mình với cấu hình của đồng nghiệp và chúng giống hệt nhau.

Một số phần của lệnh thực hiện đúng cách, bởi vì nếu tôi cung cấp hai cam kết băm, và tôi cố ý phá vỡ một, câu trả lời tôi nhận được là:

Bad Response

Nó có vẻ như một chương trình khác có thể chiếm đoạt lệnh git diff. Tôi tin rằng điều này bởi vì tôi không chắc chắn "Không có thẻ tập tin" thậm chí là một phản ứng Git có thể. Không chắc nó sẽ là cái gì nữa.

Để làm cho mọi việc trở nên khó hiểu hơn - mục tiêu cuối cùng của tôi là chạy git diff trong ngữ cảnh của msbuild và nó THỰC HIỆN TRỰC TIẾP. Bây giờ, tôi có thể hài lòng với điều này, nhưng tôi cần phải sửa đổi các lệnh diff một chút, và chạy một xây dựng đầy đủ mỗi lần không hiệu quả, cũng không dễ dàng để khắc phục sự cố. Có một tác vụ trong tập lệnh xây dựng chạy lệnh Exec và không có sự cố nào khi thực hiện diff. Tôi cũng có thể thực hiện một Diff Against Current trong SourceTree, theo hiểu biết tốt nhất của tôi, chạy một cảnh sau git diff.

Mọi trợ giúp sẽ được đánh giá rất nhiều.

:: Chỉnh sửa ::

lệnh khác nhau:

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> 

Output:

Mỗi một trong các lệnh trên trả về cùng No tags file Đáp lại, trong tất cả các hợp đồng mua lại của tôi.

Cát Trụ sở:

cd .git 
cat HEAD 
ls -R refs 

Output:

CatHead

New Repo:

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 

Output:

NewRepo

git config -e:

gitconfige

git config --global -e:

gitconfigglobale

:: Chỉnh sửa 2 ::

tôi gỡ bỏ cài đặt tất cả các công cụ kiểm soát nguồn/diffing của tôi (SourceTree, Git, SVN, WinMer ge, KDiff). Đã cài đặt phiên bản di động của Git. Đã mở CMD thành một repo, đặt đầy đủ đường dẫn đến git.exe portable và nó vẫn trả về đáp ứng No tags file.

Tôi cũng đã xem xét tất cả các biến đường dẫn của tôi cho: git, vim, ming, mintty và bất kỳ thứ gì khác có vẻ nghi ngờ, nhưng không tìm thấy bất kỳ biến nào.

Tôi đã khởi động lại sau khi thực hiện tất cả các bước và sự cố vẫn tiếp diễn.

:: Chỉnh sửa 3 ::

Tôi có một người dùng khác nhau trên máy tính xách tay của tôi, chuyển sang sử dụng đó và git diff công trình đúng cách, như vậy rõ ràng có cái gì đó với người sử dụng chính của tôi đó là mâu thuẫn. Sẽ tiếp tục xem xét thư mục User của tôi về các sự cố.

+0

bạn đã thử 'diff HEAD' git? –

+1

@jrap Sau khi suy nghĩ về điều này một chút với các chỉnh sửa của bạn - tôi thực sự tò mò làm thế nào các công cụ của bạn có thể làm một sự khác biệt hoặc đăng nhập. Bạn đã cài đặt git thư mục nào và các công cụ đó có sử dụng cùng thư mục đó không? Nó gần giống như họ đang sử dụng một cái khác. Bạn có thể muốn thử cài đặt Git Extensions và xem nó có thể làm khác biệt không - tôi biết nó sử dụng thư mục Git đã cài đặt - trên thực tế, bạn phải trỏ nó vào thư mục (bình thường). – LightCC

+1

Khi googling cho thông báo "Không có thẻ tập tin", kết quả đầu tiên tôi nhận được nói về 'vi'. Tôi không hiểu tại sao 'git' sẽ cố gắng thực thi' vi' khi chạy 'git diff' hoặc' git log', hệ thống của bạn có được cấu hình để sử dụng 'vi' làm máy nhắn tin không? – LeGEC

Trả lời

3

Dưới đây là các bước tôi đi trong tình huống này:

  1. Hãy thử như sau và kiểm tra phản ứng:

    git diff HEAD~1 HEAD 
    git diff master~1 master 
    git diff <commit-hash-1> <commit-hash-2> 
    
  2. Hãy thử cùng với nhật ký:

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

    Tôi thực sự đoán rằng các lần chỉnh sửa của bạn bị hỏng, có nghĩa là các băm trực tiếp có thể hoạt động, nhưng HEAD và/hoặc master có thể không.

  3. Nhìn vào .git/refs thư mục

    Từ thư mục repo chính:

    cd .git 
    cat HEAD 
    ls -R refs 
    

    Hy vọng rằng, HEAD được trỏ đến một chi nhánh, và nếu master được kiểm tra ra, cat HEAD đầu ra nên trông giống như:

    ref: refs/heads/master 
    

    Sau đó, ls -R refs, sẽ hiển thị thư mục heads, với các tệp cho từng chi nhánh địa phương của bạn (tức là master và có thể là những người khác). Bạn cũng có thể có các thư mục refs/remotesrefs/tags.

    Nếu bất kỳ của những điều này là hoàn toàn khác nhau hoặc mất tích, đó có thể là vấn đề của bạn ...

  4. Vì bạn đã cài đặt lại git, tạo ra một thương hiệu repo mới và thử các lệnh tương tự:

    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 
    

    Nếu điều cuối cùng này hoạt động, thì git có khả năng hoạt động tốt, nhưng một số công cụ bạn đang làm rối tung mọi thứ.

  5. Đăng cấu hình của bạn từ git config -egit config --global -e - có lẽ chúng ta có thể thấy điều gì đó?

+0

Tôi đã cập nhật câu hỏi của mình với đầu ra từ mọi thứ bạn đã hỏi .. Vẫn không có may mắn, nhưng hy vọng có thêm thông tin để hỗ trợ. – jrap

+0

Chà, điều này trở nên kỳ quặc và kỳ quặc hơn - ngay cả repo mới cũng cho ra phản hồi 'Không có thẻ tập tin' cho nhật ký và khác biệt. Thật không may, tôi không có bất kỳ kinh nghiệm với Sourcetree như một công cụ, nhưng tôi sẽ bắt đầu tìm kiếm ở đó hoặc với bất kỳ công cụ khác mà bạn đã cài đặt. Tôi thậm chí có thể đi xa như vậy để gỡ bỏ tất cả mọi thứ SCM và Git liên quan và thử một cài đặt mới của Git và thử lại một repo thử nghiệm chỉ với điều đó. – LightCC

+0

Hết ý tưởng nhanh chóng. Tôi đã thử trên repo thử nghiệm bạn đã cho tôi tạo ra, với exe di động và tôi vẫn nhận được phản hồi tương tự. Tôi cũng đã xem lại thư mục '% LOCALAPPDATA%' của mình vì bất kỳ điều gì nghi ngờ, nhưng không tìm thấy điều gì rõ ràng. – jrap

3

Khi googling cho thông báo "Không có thẻ tệp", kết quả đầu tiên tôi nhận được tất cả nói về vi.

Tôi không hiểu tại sao git sẽ cố gắng để thực hiện vi khi chạy git diff hoặc git log, nó có thể là hệ thống của bạn được cấu hình để sử dụng như một vi pager?

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

Khi đào trong tài liệu cho less, tôi thấy rằng less có thể sử dụng một tập tin ctags, để phát hiện "các tập tin có chứa từ khóa này".

Vì vậy, bạn cũng có thể xem danh sách các biến ảnh hưởng đến hành vi của 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

Dường như không có gì hữu ích. Đăng nhập tại đây: https://www.screencast.com/t/l31mPF7Peg4 – jrap

+0

@jrap: bạn đã chạy nó từ trình bao Windows cmd.exe. Hãy thử nó từ 'git bash' (giống với nơi bạn chạy' git diff' hoặc 'git log') – LeGEC

+0

Kết quả từ bash: https://www.screencast.com/t/qKDTWAvAV – jrap

Các vấn đề liên quan