1

我正在尝试将我的 AngularJS 静态站点(我从 Yeoman 开始)部署为 Github 页面,并按照Yeoman 部署指南中提供的步骤进行操作。我在第 1 步和第 2 步中取得了成功,但是当我到达第 3 步时,事情就变糟了。第 3 步告诉我运行

git subtree push --prefix dist origin gh-pages

当我运行这就是我所看到的

$ git subtree push --prefix dist origin gh-pages
git push using:  origin gh-pages
To git@github.com:siddhion/maxmythic_angular.git
 ! [rejected]        5db3233d7c0822eedc5500409ce6a2d4b73ad427 -> gh-pages (non-fast-forward)
error: failed to push some refs to 'git@github.com:siddhion/maxmythic_angular.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and merge the remote changes
hint: (e.g. 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

然后我按照提示尝试

$ git pull origin master
From github.com:siddhion/maxmythic_angular
 * branch            master     -> FETCH_HEAD
Already up-to-date.

然后git subtree push --prefix dist origin gh-pages再次尝试但得到与以前相同的错误。

在 Yeoman 部署页面上,我在一些常见错误部分下看到

您可能会收到这样的错误更新被拒绝,因为您当前分支的尖端落后。你可以通过强制推送到遥控器来解决这个问题(不过要小心,它会破坏已经存在的东西)。

我很担心强迫它,subtree push因为我一般是 git 新手,不知道什么会被破坏。我的意思是,我目前gh-pages在我的 maxmythic_angularorigin遥控器上没有分支,所以我并不担心,但我在那里有我的master,gh-pages-oldgh-pages-v1分支。如果我跑,它们会被摧毁git subtree push --prefix dist origin gh-pages吗?

更新

为了安全起见,我继续将我的工作复制到另一个文件夹中,然后添加--force到我的git subtree push命令中并运行它。这就是我得到的

$ git subtree push --prefix dist origin gh-pages --force
error: unknown option `force'
usage: git subtree add   --prefix=<prefix> <commit>
   or: git subtree add   --prefix=<prefix> <repository> <commit>
   or: git subtree merge --prefix=<prefix> <commit>
   or: git subtree pull  --prefix=<prefix> <repository> <refspec...>
   or: git subtree push  --prefix=<prefix> <repository> <refspec...>
   or: git subtree split --prefix=<prefix> <commit...>

    -h, --help            show the help
    -q                    quiet
    -d                    show debug messages
    -P, --prefix ...      the name of the subdir to split out
    -m, --message ...     use the given message as the commit message for the merge commit

options for 'split'
    --annotate ...        add a prefix to commit message of new commits
    -b, --branch ...      create a new branch from the split subtree
    --ignore-joins        ignore prior --rejoin commits
    --onto ...            try connecting new tree to an existing one
    --rejoin              merge the new branch back into HEAD

options for 'add', 'merge', 'pull' and 'push'
    --squash              merge subtree changes as a single commit

我怎样才能让 git subtree push --prefix dist origin gh-pages 命令工作,以便我可以将我的网站部署到 gh-pages?

更新

我想看看这个问题是否与说明有关,或者只是与我的仓库有关,所以我设置了一个新的 Angular 应用程序yo angular并按照部署说明进行操作。git subtree push这次工作了。我仍然不知道我的 gh-pages 存储库发生了什么。我将不得不真正学习git内外。

4

2 回答 2

0

我有同样的问题。问题是我已经在当前的仓库中提交了 dist。不作为子树。以下步骤应该可以解决问题

// remove the dist and commit
rd  /s dist
git commit -am "remove dist folder"
// add the subtree and push
git subtree add --prefix dist origin gh-pages
git subtree push --prefix dist origin gh-pages

这似乎对我有用

于 2014-07-08T18:05:57.230 回答
0

我还使用了一段时间的 subtree 方法将典型的 Yeoman dist 文件夹推送到远程(在我的例子中是 gh-pages)。这是一个凑合的事情,但当服务器上的某些内容发生变化时会引起头痛。然后,您必须求助于您上面描述的不太优雅的解决方案。正如您所注意到的,这些会带来更多麻烦。我相信对于这个特定的工作流程,使用子树方法是 hack。

有一个更好的解决方案: Rob Wierzbowski的 grunt-build-control。安装需要 10 分钟,但就像一个魅力,构建文件夹到遥控器的整个部署变得自动。完全版本控制且无痛。

它现在也在Yeoman wiki中提到。

于 2014-07-12T11:36:49.450 回答