2017-01-03 77 views
1

我剛剛嘗試學習Git; git命令行應用程序(以下簡稱「Git」)以及NetBeans中的Git集成(以下簡稱爲「NetBeans」)。據我所知,只有在NetBeans中執行的一些操作實際上在Git中顯示。就好像NetBeans有自己獨立的Staging區域(AKA:Index)和內置的.gitignore文件。NetBeans Git集成與git命令行之間的差異

例如:當我第一次初始化在我的項目文件夾的存儲庫,在命令行git的狀態給我:

D:\Dev\Learning\Experiments\StupidLoopPrinter>git status 
On branch master 

Initial commit 

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

     build.xml 
     build/ 
     manifest.mf 
     nbproject/ 
     src/ 

nothing added to commit but untracked files present (use "git add" to track) 

然而,當我在NetBeans打開查看/顯示版本標籤,然後看看在NetBeans文件樹中,當我將鼠標懸停在文件名中時,我發現許多文件被標記爲「已添加」,而其他文件被標記爲「已忽略」(即使項目文件夾中沒有.gitignore文件)樹。但是,當我右鍵單擊我的項目節點,然後選擇Git/Show Changes(在Team菜單下奇怪地不可用),在NetBeans窗口底部打開的窗格不會顯示任何「更改HEAD和Index之間,「基本上告訴我和git status命令一樣的東西。

因此,我在NetBeans中的一個.java文件上右鍵單擊並選擇了Git/Add。現在我的git的狀態顯示:

D:\Dev\Learning\Experiments\StupidLoopPrinter>git status 
On branch master 

Initial commit 

Changes to be committed: 
    (use "git rm --cached <file>..." to unstage) 

     new file: src/StupidLoopPrinter.java 

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

     build.xml 
     build/ 
     manifest.mf 
     nbproject/ 

...和StupidLoopPrinter.java上面顯示出 「HEAD和索引之間的變化。」

在仔細檢查NetBeans文件樹中所有文件右側的標記後,我看到StupidLoopPrinter.java文件旁邊有一個[A/- ],而所有其他文件都有一個[ -/A]旁邊。這種差異的意義是什麼? (你可以想象,這是不可能的谷歌。)

最後:爲什麼NetBeans顯示文件爲「添加」或「忽略」時,git狀態只顯示它們既不添加也不忽略?事實上,NetBeans是否保留了自己的內部忽略列表和暫存區域?如果是這樣,爲什麼這不是記錄?

=================更新================ 我已經運行提交選擇團隊/提交在NetBeans菜單。正如預測的那樣,就git命令而言,這確實改變了階段。 git的狀態給我:

D:\Dev\Learning\Experiments\StupidLoopPrinter>git status 
On branch Alice 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

     modified: src/StupidLoopPrinter.java 

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

     build/ 
     nbproject/private/ 

no changes added to commit (use "git add" and/or "git commit -a") 

注意,顯示爲「未跟蹤」幾個文件上面沒有顯示爲「未跟蹤」在這裏。但是,NetBeans沒有創建.gitignore文件。

+0

您最初在NetBeans中看到的內容可能是一次性的。我不知道該插件,但它應該反映Git bash命令行工具向您展示的內容。 –

+0

@TimBiegeleisen - 沒有。我已退出Netbeans並重新啓動。一切都是一樣的。現在,我懷疑如果我使用NetBeans進行提交,那麼它可能會修改git臨時區域以及創建.gitignore文件以匹配NetBeans在界面中顯示的內容。但是,我想一次採取這一步。我的目標不是隻能做一次提交。我希望能夠確切地知道NetBeans在做什麼,這樣我就可以寫出它來教導其他人並幫助他們避免這些缺陷。我會嘗試這個實驗並做進一步的評論。 – GrantRobertson

回答

1

Netbeans File sTatus Information參見:

IDE將顯示一個文件中的兩個狀態值:

  • 描述文件索引狀態和當前HEAD提交之間的差異的狀態。
  • 描述文件工作樹和索引狀態之間差異的狀態,

所以:

StupidLoopPrinter.java文件旁邊有一個[A/-],而所有其他文件具有[-/A]

表示:

  • StupidLoopPrinter.java是添加到索引中的新文件。
  • 的其他文件是新文件,沒有添加到索引(即未經跟蹤)

被忽略的文件,嘗試在命令行一個:

git check-ignore -v -- an-ignored-file 

你會看到,如果有可以解釋該狀態的.gitignorecore.excludesfile設置。

+0

我已閱讀鏈接文檔。但是,現在我看到兩個狀態之間用斜線分開。所以,[ -/A](在我沒有手動添加的所有文件上)意思是「在階段和提交之間沒有區別」,斜槓左側的短劃線和「'添加到我的工作目錄但未暫存」 A在斜槓的右側。我想後者還具有「和NetBeans計劃將它放在下一個提交中的附加含義,即使您沒有專門告知NetBeans這樣做。「 – GrantRobertson

+0

@GrantRobertson」not staged「意味着它不會成爲下一個git commit的一部分 – VonC

+0

雖然你對git命令的說法是正確的,但它似乎意味着與NetBeans不同的東西。 – GrantRobertson

0

作爲次要答案,我想補充一點,NetBeans似乎並沒有真正的階段。相反,它只是標記某些文件以包含在下一次提交中。這個「標記」僅爲NetBeans所知。因此,一旦爲Git初始化NetBeans項目文件夾(使用git命令或NetBeans界面),那麼第一次提交的結果取決於您是使用git命令還是使用NetBeans界面。如果你使用git命令並且僅僅輸入

git init 
git commit 

......你將在你的提交中沒有任何結果。但是,如果您使用NetBeans進行提交,那麼它會自動將所有已標記爲[ -/A]的文件並將它們添加到舞臺上,然後執行提交。所有這些文件將被視爲「跟蹤」,並且git命令會注意您的工作文件是否更改。 NetBeans也會忽略所有標記爲[I]的文件,但這些信息不會通過.gitignore文件傳送給git命令。相反,NetBeans僅僅依賴於那些文件未被跟蹤的事實,以防止它們未來可能使用git命令進行的提交。我期望NetBeans Git插件的作者假定我們將始終使用NetBeans接口並且從不使用git命令。