2016-12-02 39 views
0

我正在一家大型企業企業工作,其中所有開發人員機器均爲Windows 7 Enterprise SP1。是否有一個「安全」的unix模擬器在Windows上運行git?

我正在運行從RTC到git的主要移植項目(導致類似1200 git回購)。在生產環境,構建或測試環境中沒有Windows服務器 - 一切都是Solaris或RedHat。該解決方案將推出給約200名開發人員。

通常會推動使用更多的Unix命令行工具,並且Windows上有幾種不同的替代方法,如:Cygwin,git-bash,cmder。我避免運行一個完整的linux虛擬機,因爲它引入了太多的其他問題(大多數開發人員沒有本地管理員權限,因特網代理是一個常見的麻煩,所以我不想讓網絡成爲NAT的更大問題)。

過去8個月我一直在運行Cygwin(mintty 2.6.2),直到今天我一直在使用git(v2.8.3)碰到一個非常令人關注的問題,git status甚至報告了一個乾淨的工作目錄儘管多個文件和文件夾已被刪除回購。只有在我重新創建了與其中一個已刪除文件夾相同名稱的文件夾後,所有已刪除文件才能正確顯示,並顯示git狀態。

我會解釋症狀和我在做什麼,但到目前爲止我沒有轉載這個問題。我懷疑問題是在模擬的linux文件系統和實際的Windows文件系統之間存在問題。各種模擬器的實現方式有什麼不同嗎?

我打的具體問題有以下症狀:

客戶端:

  1. git的狀態顯示出一個乾淨的工作目錄
  2. git的日誌顯示,3款A,B和C(提交Ç檢查退出)
  3. 回購內容是一個文件夾包含一個文件,另外2個文件在根文件夾中,再加上帶有內容的.git文件夾
  4. git存儲列表爲空
  5. GIT中分支-a只報告主,HEAD和原點/主

服務器端:

  • 原點包含13個附加文件夾,每一個文件
  • 的也包含原點提交A,B和C
  • 只有主分支是本
  • 提交一個爲初始空提交。 提交B是所有內容添加的地方,14個文件夾和16個文件。 提交C是另一個空提交

    提交A和提交C都是使用工具創建的,以幫助進行遷移。它運行兩個命令:「git init」和「git commit --allow-empty -m'初始提交'」

    我無法理解git status如何報告刪除的文件(我記得刪除它們,但它以前一些日子有多個計算機進入休眠狀態,並可能是一個或兩個重起恢復我的工作)

    試圖找出發生了什麼事我這樣做:

    1. 我創建了一個新的文件,然後運行「混帳添加「,」git commit「(創建D)和」git push「。
    2. 提交D出現在具有新文件的服務器上。服務器上仍存在13個額外的文件夾和文件。
    3. 我跑了「混帳拉」,這回「已經是最新的」
    4. 我檢查了每一個變化承諾在客戶端和服務器端和每一個差異是一樣的
    5. 我克隆一個新副本的回購和內容匹配服務器與13額外的文件和文件夾與額外的提交D和額外的文件
    6. 然後我重新創建一個與刪除的文件夾名稱相同的文件夾,並運行「git status」所有已刪除的文件和文件夾都正確報告。

    我不能解釋這個任何其他方式,除了一個嚴重的錯誤,只是在Cygwin中使用git不安全。我希望社區可能會在這方面對我提出一些建議,這是一個足夠明確的問題,即mod不會標記我的帖子。

    我會盡我所能嘗試重現問題,並在有更多信息時更新問題。

    編輯:更新2016年12月8日

    我試圖重現錯誤都沒有成功。如果我在工作中再次看到它,我會更新此問題。

    +0

    爲什麼更好你不只是使用本機[Git for Windows](http://git-for-windows.github.io/)端口?一段時間以來,它的發展甚至得到了Windows™的支持者的支持。它爲那些喜歡獲得更多「類Unix」體驗的人提供'MinTTY'和一個'bash'端口。同時它在本機Windows控制檯中運行正常。 – kostix

    +0

    @kostix我的git已經安裝了windows,但是我的git bash在mintty(2.0.6)的舊版本中運行,而不是在cygwin中運行。我更喜歡cygwin的主要原因是安裝tmux + vim等其他工具比較容易。 – philbert

    回答

    1

    我從來沒有在Cygwin上看到Git的這種行爲。實際上,目前我在Cygwin中使用Git for Windows,它也可以正常工作。我曾經使用Cygwin Git,但是我感覺它比Windows的Git慢,比如我從Cygwin切換到Git for Windows,並且效果很好。

    如果您在某些時候將Windows盒更新到Windows 10,您還可以考慮另一種選擇,Windows的Subsytem for Linux,它是由MS與Canonical一起開發的基於Ubuntu的虛擬Linux環境。在我看來,它仍然處於成熟和不完全可用的狀態,但是在那裏你有一個本地支持的虛擬Linux環境,你可以使用apt-get等等。

    1

    你提到的問題確實是出乎意料的,我懷疑Cygwin可能會導致它。但你有以下選項

    • git帶有git bash,它支持所有主要的unix命令,它看起來完全像unix shell。我在Windows 10上使用git版本2.9,並大量使用grep等主要的unix命令,sed &查找,並且它們都非常出色。即使它支持vi但我不使用它

    • git帶有git CMD,並且相同的git命令可以在windows命令提示符下工作,就像它們在unix上一樣。你不應該需要一個單獨的模擬器。

    • 雖然你提到你使用的是Windows 7,但Windows 10自帶的Unix猛砸

    • 原生支持可以使用的GnuWin32但我懷疑它會比Cygwin的

    +0

    感謝您對gnuwin32的建議。我也設法谷歌這個有用的答案:http://stackoverflow.com/questions/10712550/difference-between-gnuwin32-and-cygwin – philbert

    相關問題