2015-08-26 81 views
2

我看到這已被問了很多次,通常有不同的警告。在我的例子中,我使用git從我的本地開發框部署到git服務器,最後,通過cron作業將更改發佈到Web服務器上。git pull和虛假的本地變化

我的工作流程是這樣的:

  1. 提交更改到本地工作副本
  2. 更改推到上游服務器在網絡上
  3. git pull -Xingore-space-at-eol(作爲裸回購協議,我把我的本地創建)服務器

理論上這應該起作用。但是,git拒絕這樣做,似乎隨機選擇了它認爲有局部變化的文件。

Updating bb48022..7eff182 
error: Your local changes to the following files would be overwritten by merge: 
     app/models/User.php 
Please, commit your changes or stash them before you can merge. 
Aborting 

在Web服務器上,我執行了一些文件更改 - 我添加了未跟蹤的文件,並且我更改了權限。 git配置爲filemode = false,我也使用git config --global core.autocrlf true啓用自動CRLF處理。

git diff --ignore-space-at-eol返回沒有差異。 git status顯示了大約十幾個「未進行提交的更改」,但這些文件並沒有真正以我能注意到的任何方式進行更改。

我試圖與

git stash 
git pull 
git stash pop 

積攢錯誤的局部變化,但它不能只是在同一git pull

我只在這一點上的工作選項吹走整個克隆的文件夾,並做了每次新鮮克隆,然後申請許可變更,並做一個composer install

我必須在這裏丟失一個基本的概念。任何幫助是極大的讚賞!

+0

你是什麼意思,他們「沒有改變,你可以注意到的任何方式」?他們如何改變?空白?向我們展示你的'.gitattributes'文件? –

回答

1

找到了解決方案。這個問題與終端管理有關。一個開發盒是Windows,另一個是Linux,git服務器是Linux,Web服務器是Linux。

在Windows中,我發現git statusgit diff顯示了未進行提交的相同修改文件。我的.gitattributes文件中有* text=auto,這意味着git會嘗試自動確定適用於所有文本的正確行結束符。出於某種原因,我的Windows盒子的索引不同步。在此之後的方向 - http://git-scm.com/docs/gitattributes#_end_of_line_conversion - 我做了以下內容:

$ rm .git/index  # Remove the index to force Git to 
$ git reset   # re-scan the working directory 
$ git status  # Show files that will be normalized 
$ git add -u 
$ git add .gitattributes 
$ git commit -m "Introduce end-of-line normalization" 

我執行的Web服務器上一個新的克隆,做了一些測試的變化。它現在似乎正在工作。