我有一个存储库,里面有我正在使用的Laravel App,它有master和gh-pages分支。
当我这样做时
git checkout gh-pages
一切正常但主分支中的两个目录'app'和'vendor'出现了。在gh-pages分支中,我将它们都添加到.gitignore中,以确保它们不会被推送到gh-pages远程分支。但后来我决定尝试删除供应商目录。当我切换回主分支时,供应商目录已经消失,所以我不得不运行composer install来恢复它。
然后我尝试再次克隆存储库,获取gh-pages分支并出现同样的问题。
在gh-pages分支中忽略它们,但它们不属于那里,所以我很困惑为什么它们在那里。这是两个分支中出现的唯一两个目录。
您可以看到github https://github.com/isimmons/office-twit上的repo,这些目录不在那里,所以我不明白为什么他们在我的本地克隆仓库中。
更新:从repo的干净克隆开始,这是cli输出的完整列表。发生了一些事情,使得/ app目录在gh-pages分支中消失,但问题仍然存在于/ vendor目录中。
C:\Users\lotus\projects
λ git clone git@github.com: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 status显示一个干净的目录,因为/ vendor在.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'
正如你可以看到/ vendor目录显示在gh-pages目录中,虽然在https://github.com/isimmons/office-twit/tree/gh-pages的远程查看gh-pages分支上该目录不存在。所以这发生在当地。
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-pages因为/ vendor不属于那里而且在向.gitignore添加/ vendor时会阻止它被跟踪,它根本不应该存在。
如果我在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 :(得分:1)
在gh-pages
中,您忽略了/app
和/vendor
。
在master
中,您只忽略/vendor
,/app
实际上在您的分支中。
无论你在本地克隆中拥有什么,如果它不在存储库中,那么它就不会从存储库中到达那里,它必须有其他方式。
看来你只是混淆了,就是这样。如果你有一个干净的克隆,然后在分支之间切换,一切都应该按预期工作:只有master
将有app
目录,没有一个会有vendor
目录。
请注意,当您的工作目录是干净的(没有更改且没有分阶段更改),并且您从master
切换到gh-pages
时,Git会正确删除/app
目录。
<强>更新强>
当您从master
切换到gh-pages
时,Git会正确删除被标记为忽略的vendor
。 master
分支不跟踪此目录,自动删除它将是危险的。所以它不会删除它,这是正常的。似乎将/vendor
添加回.gitignore
可以解决您的所有问题。