2011-04-27 74 views
67

我正在開發一個在GitHub上託管的jQuery插件。它包括其中我手動複製並推到分支gh-pages一個demo,我希望做的是有它所以當我推了更改master它會自動推送到gh-pages,或至少一種設定,他們是鏡像的。Github:將gh-pages鏡像爲主

我已經看到了這一點question,但不知道它是否真的回答我的問題是關於這些要求:

  1. 我用Tower,我不介意使用的終端(Mac)來進行更改只要該解決方案適用於此GUI,就可以進行配置。
  2. 我只想在某些回購站點上進行「鏡像」,而不是在我的機器上進行全部回覆。

乾杯

+1

Github現在允許從主分支中的主分支或'/ docs'驅動頁面。 https://github.com/blog/2228-simpler-github-pages-publishing – 2016-08-18 13:10:24

回答

65
git checkout gh-pages 
git merge master 
git push origin gh-pages 
+0

乾杯史蒂夫,我稍後再說,告訴你我是怎麼做的。 – 2011-04-29 11:46:22

+0

不錯的一個史蒂夫,原來的解決方案沒有工作,但這是一種享受。 – 2011-06-19 22:02:35

+12

這只是一次性解決方案,如果我沒有弄錯...... – 2013-07-30 06:06:33

106

以下兩行添加到的.git/config[remote "origin"]部分:

push = +refs/heads/master:refs/heads/gh-pages 
push = +refs/heads/master:refs/heads/master 

每次push它會自動推高手GH-頁爲好。 我使用這個爲jQuery Lifestream project

+0

方便!非常方便。謝謝 – James 2011-11-01 11:36:14

+0

@James不客氣,花了一段時間才找到這個。 – christianvuerings 2011-11-08 12:48:22

+0

是否每個人都必須爲每個本地回購執行此操作?或者當你克隆它時會自動開心嗎? (在你做出這個改變之後)你能否改變'.git/config'? – ThomasReggi 2012-09-28 21:22:10

27

不要做什麼denbuzze表明上述!推動中的+(加號)使其悄悄地接受非快速更新。我發現困難的方式是,這可能會導致工作的懸而未決,導致工作流失。簡單地刪除加號使得這是一種更安全的方法。

push = refs/heads/master:refs/heads/gh-pages 
push = refs/heads/master:refs/heads/master 

現在不是導致強制更新,這將導致警告&拉建議

To https://github.com/someuser/repo.git 
! [rejected]  master -> gh-pages (fetch first) 
! [rejected]  master -> master (fetch first) 
error: failed to push some refs to 'https://github.com/someuser/repo.git' 
hint: Updates were rejected because the remote contains work that you do 
hint: not have locally. This is usually caused by another repository pushing 
hint: to the same ref. You may want to first integrate the remote changes 
hint: (e.g., 'git pull ...') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 
+0

@denbuzze,這是真的!你騙了我們! :) – KyleMit 2014-06-19 06:07:33

+0

我不確定denbuzze暗示什麼會因爲我沒有測試而破壞任何東西,但我確實知道您的建議是什麼。 – Sevin7 2014-11-28 14:41:18

+3

@MCSDWVL:你爲什麼不對denbuzze的回答發表評論? – 2015-06-04 05:13:38

2

我個人比較喜歡的一個別名來包裝這個:

alias gpogh="git checkout gh-pages && git merge master && git push origin gh-pages && git checkout -" 

這反映了你的主人到gh-pages,推送到github,然後切換回你以前工作的分支。

1

提交掌握..

則:

git checkout gh-pages // -> go to gh-pages branch 
git rebase master // bring gh-pages up to date with master 
git push origin gh-pages // commit the changes 
git checkout master // return to the master branch 
8

我加入進一步解釋@denbuzze@MCSDWVL答案。

如果你既想自動每次運行git push origin時間推到mastergh-pages,你可能要一個的Refspec添加到您的回購協議的混帳配置。

因此,根據git-scm book,你可以添加兩個RefSpecs,通過添加兩個push值回購的配置文件.git/config

[remote "origin"] 
url = https://github.com/<github_user>/<repo_name> 
     fetch = +refs/heads/*:refs/remotes/origin/* 
     push = refs/heads/master:refs/heads/master 
     push = refs/heads/master:refs/heads/gh-pages 

這將導致git push origin到:

  1. 推本地master分支到遠程master分支
  2. 推送本地master支行h到遠程gh-pages分支

默認情況下。

注意:使用+規範之前,強制推到回購協議。所以請謹慎使用:

refspec的格式的格式是一個可選+,其次爲<src>:<dst>,其中<src>是在遠程端進行的引用格式和<dst>正是這些引用將在本地寫入。 +告訴Git更新參考,即使它不是快進。

+0

將所有文件從主服務器推送到' gh-pages',甚至那些與'gh-pages'無關的東西?爲什麼GitHub使這個如此複雜?如果它只是渲染一個文件夾'gh-pages',它會不會更簡單?這裏試圖創建這種[gh-pages文件夾設置](https://gist.github.com/chrisjacob/825950)。 – 2015-06-04 05:16:07

+1

[GitHub現在允許從任何分支和目錄發佈頁面。](https://github.com/blog/2228-simpler-github-pages-publishing) – 2016-08-18 17:32:42

+0

謝謝! – Fergus 2017-04-09 21:16:46

1

UPDATEGitHub now allows pages to be published from any branch and directory you want.


容易得多,我用gh-pages分支爲主。 「主人」沒有什麼不可思議的;它只是另一個分支名稱。有有關gh-pages的神奇功能,因爲這是GitHub尋找index.html來爲你的頁面提供服務的地方。

瞭解更多my other answer on this topic

使用gh-pages作爲主也比子樹更容易,這比子鏡像更容易,這比子鏡像更容易。您可以使用git subtree,如herehere所述:如果您有一個包含演示的目錄,可以使用一個命令將該目錄推送到gh-branch。假設您命名目錄gh-pages以說明問題。你已經提交和推送更改至master在此之後,運行此更新GH-網頁:

git subtree push --prefix gh-pages origin gh-pages 

的問題是,如果你在gh-pages文件引用文件在外面其他目錄。符號鏈接不起作用,因此您必須將複製文件放在用作gh頁面的目錄中。

如果你use gh-pages as master,這個問題不會發生。

0

或者您可以使用下面的cmd,這會將您的本地主分支推送到gh-pages主分支。 git push -f origin master:gh-pages