2015-10-20 46 views
1

問題:關閉自動提交的修改過的文件在Visual Studio 2013與git

當我在VS 2013中添加新的文件到一個web項目,則立即「檢查」到Git的;該文件立即保存,然後在文件左側出現「簽入」圖標。如果我對現有文件進行更改,那麼當我保存該文件時,它將「檢入」。請注意,源git存儲庫沒有被修改,但我認爲我的本地存儲庫正在簽入。

預期的行爲:

添加新文件或更改現有的一個,保存,文件仍保留「簽出」,必須準備好時,手動檢查。這是期望的行爲,並且是該項目的行爲方式,直到它開始按照同事的系統描述行事,隨後出現在我的兩個系統上。

背景:

我的同事設法源控制過程返回到它是什麼,試圖一對夫婦十幾種不同的技術最初 - 刪除,復位等,但不知道她做了什麼專門解決它。我在一臺計算機上做了同樣的事情,但無法解決這個問題,但在我的另一個系統上,我也瘋狂地採用了我的方法,並設法使其工作。

如果我從VS 2013轉到git命令行並輸入「git status」,我會看到已更改文件的列表,但沒有添加任何文件。略高於此文件列表是文本:

On branch master 
Your branch is up-to-date with 'origin/master'. 
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) 

我很熟悉,TFS和SourceSafe的,但這是我第一次使用Git工作。我知道他們在源代碼控制的方法上是非常不同的野獸,並且也意識到我的術語(即簽入,簽出)更多是面向TFS/SS的,所以請原諒措辭中的錯誤。

項目信息:

這是採用了棱角分明微風以及鮑爾管理包一個VS Web項目。正確工作的項目不使用Angular,Breeze或Bower。

結論:

誰能要麼告訴我是怎麼回事,或者如果有辦法讓我的項目回到它表現出最初的行爲?先謝謝你。

+0

你正在運行什麼VS 2013更新?你是否依賴圖像來告訴你該文件已簽入,或者是在存儲庫中實際創建的提交?你能顯示'git history'嗎?你能否顯示團隊資源管理器變更頁面的截圖? –

+0

我正在「正常」工作的系統上運行Update 5。我的同事正在運行Update 4,但在我的其他系統上,我還運行了更新5,並按預期工作。它不只是圖標。例如,更改頁面顯示除.proj文件以外沒有任何更改;還值得注意的是,沒有「未跟蹤」的文件,而在正常工作的系統上有。不幸的是,我今天在家中的問題不再發生的計算機上工作,所以我不能做一個截圖。非常感謝您的回覆。 –

回答

0

我在項目中遇到的問題是我的.gitignore文件是空的。在正常工作的項目中拷貝.gitignore文件的內容時,Visual Studio會返回向我顯示已更改的項目,解決方案資源管理器中文件旁邊的圖標表示文件的正確狀態(即更改,添加,等等。)。我不明白git足夠了解爲什麼這會解決這個問題,但我想在這裏發佈這個以防其他人碰到這個問題。

4

Git並不像其他版本控制系統那樣工作。在Git中,「簽入」和「簽出」這兩個術語並不是指在TFVC或SourceSafe中可能出現混淆的地方。

使用SourceSafe,當您「檢出」文件時,您告訴版本控制系統您打算編輯文件,並阻止其他用戶在此期間進行編輯。這源於SourceSafe和TFVC等工具是集中式的,而Git則是分散式的。使用集中版本控制系統,每個人都在編輯同一份文件,這就是爲什麼需要鎖定和解鎖特定文件以進行編輯。

使用Git,您可以隨時編輯任何文件,因爲您正在根據自己的本地副本存儲庫進行編輯。一旦你對變化感到滿意,你可以將它們推送到一個遠程倉庫,在你的情況下,倉庫可能是TFS服務器上託管的倉庫,並與你的團隊項目相關聯。沒有看門人的行爲來阻止您進行編輯,因爲這不是必需的。所以在Git中,「checkout」只是一個提取 - 你告訴Git你想加載哪個分支和/或提交。

使用SourceSafe,您執行「簽入」來完成更改並將其推送到中央存儲庫。這釋放了文件以供其他用戶編輯。

使用Git,事情有點不同。您將「更改」提交到本地存儲庫,然後定期將這些更改「推送」到您的團隊用於同步更改的遠程(共享)存儲庫。由於其他用戶正在對存儲庫自己的克隆進行編輯,因此不需要通過檢入文件來解鎖文件。

Git的另一個不同之處在於您可以暫停或取消暫掛未完成的更改。只有通過「添加」進行的更改纔會被提交到提交中。 Visual Studio基本上爲您提供「包含的更改」與「排除的更改」。從本質上講,如果VS顯示給定的更改包含在內,那麼它已經(或將會)在Git中上演,並且當你點擊「Commit」時最終會被提交。

關於您看到的視覺線索:我相信您看到的是Visual Studio告訴您文件已被修改,而不是已經簽入。當您在與Git存儲庫關聯的解決方案中進行編輯時,VS將在「解決方案資源管理器」窗口中的每個已修改文件的左側顯示一個紅色複選標記,以指示它已被編輯並且有待更改。 (已添加的新文件將在其旁邊顯示綠色加號。)所有這一切意味着該文件已被更改 - 用戶提交或放棄更改仍然由您決定。一旦您提交了更改,就可以與遠程存儲庫同步,將更改發佈到團隊的其他成員。此時,如果其他團隊成員的變更與您的變更之間存在任何衝突,且他們不易合併,Git/VS將停止並要求您手動協調衝突。

在你的情況下,Git/VS沒有進行任何自動檢入。這只是表明某些文件有未決的更改。

完整的Git教程將超出此答案的範圍,因此我建議您自己做一些閱讀,以更好地瞭解Git如何在隱藏工作方式下工作以及Visual Studio如何與其進行交互。

+0

謝謝你的詳細回覆。我同意我的理解非常有限,而且我的術語是關閉的。儘管如此,雖然,我不知道爲什麼這個項目表現爲我的另外兩臺計算機上,以及在全部由VSO管理的其他五個項目的git「期望」。我的機器和其他機器之間必須有設置或某種配置差異;因爲我們已經看到了同樣的行爲在其他兩臺計算機,並通過「瘋狂地擺動」固定它,勒金了,我想弄清楚如何獲取我的系統工作,因爲我不能代碼,並承諾在我的主電腦 –

相關問題