2013-12-15 110 views
0

我有一個存儲庫,裏面有一個Laravel應用程序,我正在使用其中包含master和gh-pages分支。git checkout gh-pages分支有來自主分支的文件

當我做

git checkout gh-pages 

一切正常,但兩個目錄「應用程序」,然後從主分支顯示了「供應商」。在gh-pages分支中,我將它們都添加到.gitignore中,以確保它們不會被推送到gh-pages遠程分支。但後來我決定嘗試刪除供應商目錄。當我切換回主分支時,供應商目錄不見了,所以我必須運行composer install才能恢復。

然後我試着再次克隆版本庫,讀取gh-pages分支併發生同樣的問題。

忽略他們在gh-pages分支中的作品,但他們不屬於那裏,所以我很困惑他們爲什麼在那裏。這是兩個分支中出現的唯一兩個目錄。

你可以看看在github https://github.com/isimmons/office-twit回購這些目錄不存在,所以我不明白他們爲什麼在我的本地克隆回購存在。

更新:從清潔克隆的repo開始,這裏是cli輸出的完整列表。發生了什麼使/ app目錄在gh-pages分支中消失的問題,但問題仍然存在於/ vendor目錄中。

C:\Users\lotus\projects 
λ git clone [email protected]:isimmons/office-twit.git 
Cloning into 'office-twit'... 
remote: Counting objects: 470, done. 
remote: Compressing objects: 100% (254/254), done. 
rRemote: Total 470 (delta 190), reused 458 (delta 178) 
Receiving objects: 100% (470/470), 946.23 KiB | 460.00 KiB/s, done. 
Resolving deltas: 100% (190/190), done. 

C:\Users\lotus\projects 
λ cd office-twit\ 

C:\Users\lotus\projects\office-twit (master) 
λ ls 
app  bootstrap  composer.lock phpunit.xml readme.md upgrade.md 
artisan composer.json CONTRIBUTING.md public  server.php 

C:\Users\lotus\projects\office-twit (master) 
λ git remote 
origin 

C:\Users\lotus\projects\office-twit (master) 
λ git branch 
* master 

這一切都很好。雙重檢查以確保我擁有的是'origin'遠程'master'分支,並且/ vendor目錄缺失,因爲它應該是。

在拉入gh-pages分支之前,我做了一個'composer update',它添加了/ vendor目錄。

C:\Users\lotus\projects\office-twit (master) 
λ composer update 
Loading composer repositories with package information 
Updating dependencies (including require-dev) 
    - Installing intouch/newrelic (dev-master aca23cc) 
    Loading from cache 

    - Installing symfony/translation (2.4.x-dev 0919e0f) 
    Loading from cache 

    . . . many more packages install . . . 

Generating autoload files 
Generating optimized class loader 

清單我看到/供應商目錄中的內容,因爲我應該在這一點上,和git狀態顯示一個乾淨的目錄,因爲它應該,因爲/供應商是在的.gitignore文件。

C:\Users\lotus\projects\office-twit (master) 
λ ls 
app  bootstrap  composer.lock phpunit.xml readme.md upgrade.md 
artisan composer.json CONTRIBUTING.md public  server.php vendor 

C:\Users\lotus\projects\office-twit (master) 
λ git status 
# On branch master 
nothing to commit, working directory clean 

接下來我結帳並跟蹤gh-pages分支,所以我在本地應該與遠程(原始)上的內容相同。

C:\Users\lotus\projects\office-twit (master) 
λ git checkout -b gh-pages origin/gh-pages 
Branch gh-pages set up to track remote branch gh-pages from origin. 
Switched to a new branch 'gh-pages' 

正如你可以看到不知何故/供應商目錄,雖然在GH-的網頁目錄上顯示出在https://github.com/isimmons/office-twit/tree/gh-pages遠程查看GH-頁面分支的目錄不存在。所以這是本地發生的。

C:\Users\lotus\projects\office-twit (gh-pages) 
λ ls 
assets index.html README.md vendor 

C:\Users\lotus\projects\office-twit (gh-pages) 
λ git status 
# On branch gh-pages 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  vendor/ 
nothing added to commit but untracked files present (use "git add" to track) 

我不想在這一點上,推動GH-頁面,因爲/供應商不屬於那裏,並同時加入/供應商的.gitignore將保持它被跟蹤,它不應該在那裏所有。

如果我在gh-pages分支中刪除/ vendor,那麼git status會顯示一個乾淨的工作目錄,但是當我更改回主分支/供應商時,它也被刪除了。

C:\Users\lotus\projects\office-twit (gh-pages) 
λ rm -rf vendor 

C:\Users\lotus\projects\office-twit (gh-pages) 
λ git status 
# On branch gh-pages 
nothing to commit, working directory clean 

C:\Users\lotus\projects\office-twit (gh-pages) 
λ git checkout master 
Switched to branch 'master' 

C:\Users\lotus\projects\office-twit (master) 
λ ls 
app  bootstrap  composer.lock phpunit.xml readme.md upgrade.md 
artisan composer.json CONTRIBUTING.md public  server.php 

最後更新:我只是想出了爲什麼/ app目錄之前有。當我在SublimeText中打開本地倉庫進行編輯時,即使主分支是乾淨的,然後切換到gh-pages分支,/ app將重新出現在該分支中。這不是因爲我嚴格使用cli而發生的。所以解決這個問題的部分是在切換分支之前完全關閉/ app目錄。

+0

我覺得奇怪的是GitHub想要一個'gh-pages'分支,而不是'gh-pages'文件夾。使用文件夾,項目的演示使用來自主服務器的文件更容易,而不必始終保持兩個分支同步。有一個高度投票的問題[鏡像gh頁面掌握](http://stackoverflow.com/questions/5807459/github-mirroring-gh-pages-to-master)。 –

回答

1

gh-pages您忽略/app/vendor。 在master中,您只忽略了/vendor/app實際上是在您的分支中。

無論你在本地克隆中有什麼,如果它不在存儲庫中,那麼它不會從存儲庫中獲得,它必須以其他方式到達那裏。

看來你剛剛變得混亂起來,就這樣。如果你有一個乾淨的克隆,然後在分支之間切換,一切都應該按預期工作:只有master將有app目錄,並且沒有任何將有vendor目錄。

請注意,當您的工作目錄是乾淨的(沒有更改並且沒有分階段更改),並且您從master切換到gh-pages時,Git將正確刪除/app目錄。

UPDATE

當您切換從mastergh-pages,Git會不正確刪除vendor,其標記爲被忽略。 master分支不會跟蹤此目錄,並自動刪除它會很危險。所以它不會刪除它,這是正常的。看來,加入/vendor回到.gitignore會解決你所有的問題。

+0

對,主人應該有/應用程序。本地它也得到/供應商做作曲家安裝。主分支沒有錯。只是當我在本地簽出gh-pages時,我可以在我的編輯器(sublimetext)中觀看文件更改,除了/ app和/ vendor停留在那裏之外,所有這些文件都會更改。我從命令行做了一個ls,並且他們也在那裏列出。我會在早上嘗試一個新的克隆,看看會發生什麼。也許我搞砸了,然後會看到它。 – isimmons

+0

不需要新的克隆。當你的工作目錄是乾淨的(沒有變化,沒有階段性變化),並且你從主頁切換到gh頁面時,Git將刪除/ app目錄。 – janos

+0

我更新了問題以顯示來自cli的所有輸出。這一次甚至沒有在編輯器中打開回購,並從一個乾淨的克隆開始,以確保SublimeText沒有做一些奇怪的事情。也許你可以在克隆和檢出分支時看到我做錯的事情。 – isimmons