git checkout gh-pages分支包含来自master分支的文件

时间:2013-12-15 02:16:00

标签: git github

我有一个存储库,里面有我正在使用的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目录。

1 个答案:

答案 0 :(得分:1)

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

无论你在本地克隆中拥有什么,如果它不在存储库中,那么它就不会从存储库中到达那里,它必须有其他方式。

看来你只是混淆了,就是这样。如果你有一个干净的克隆,然后在分支之间切换,一切都应该按预期工作:只有master将有app目录,没有一个会有vendor目录。

请注意,当您的工作目录是干净的(没有更改且没有分阶段更改),并且您从master切换到gh-pages时,Git会正确删除/app目录。

<强>更新

当您从master切换到gh-pages时,Git会正确删除被标记为忽​​略的vendormaster分支不跟踪此目录,自动删除它将是危险的。所以它不会删除它,这是正常的。似乎将/vendor添加回.gitignore可以解决您的所有问题。