2011-08-04 38 views
37

我想將我所有的源代碼和文檔保存在一個git存儲庫中。我已經將github頁面集成到了我的主項目中,現在我想對github wiki做同樣的事情。如何將GitHub wiki集成到主項目中

我知道github wiki是普通的git倉庫。我的計劃是將wiki添加爲我的主要回購的遠程,並將所有內容保存在一個地方。然而,在維基repo中,所有內容都位於根目錄中,因此會混亂我的主項目。

有沒有人試過這個?處理這個問題的最好方法是什麼?

+0

我去了子模塊。感謝您的答案。 –

+1

維基作爲一個子模塊,這是怎麼回事?我想做類似的事情,但還沒有把我的頭包裹在子模塊業務中。這將如何應對分支和合並,因爲我希望我的代碼的「開發」分支與wiki相同,所以當我將它與我的主分支合併時,它也會將這些更改合併到實時wiki分支。 –

+0

但是把它作爲子模塊有什麼意義呢?無論如何,沒有其他人可以修改或使用它。你可以在github之外的任何地方使用它嗎?我的意思是你可以把它放在一個單獨的目錄中作爲github repo,並且簡單地從main repo中將該目錄設置爲.gitignore。 – jayarjo

回答

32

您想將wiki添加爲submodule。同樣的Wiki git repo作爲遠程連接,但在具有自己的.git目錄的子目錄中。

git submodule add git://github.com/you/proj.wiki 

在您的主repo的根目錄中添加wiki repo作爲wiki/dir中的子模塊。

+7

現在它實際上是'git:// github.com/you/proj.wiki' – cregox

+2

這是否允許您在Wiki中進行的更改在圖表選項卡中可見? – devlord

3

您可以創建一個submodule其中包含wiki回購或定期獲取並切換分支來回。

5

我覺得這非常乏味 - 在我看來,github wiki應該是主存儲庫的分支,或者至少應該可以做出這樣的選擇。

儘管如此,我認爲最好的解決辦法是簡單地移動維基到主存儲庫說,在docs/wiki,使用subtree merge。例如,假設您的存儲庫爲you/proj,則您的wiki位於:git://github.com/you/proj.wiki。然後在你的主回購其合併,你會怎麼做:

git clone git://github.com/you/proj 
cd proj 
git remote add -f wiki git://github.com/you/proj.wiki 
git merge -s ours --no-commit --allow-unrelated wiki/master 
git read-tree --prefix=wiki/ -u wiki/master 
git commit -m "Github wiki subtree merged in wiki/" 

你甚至可以保留維基工作的一側,歡迎公衆捐款那裏,但隨後獸醫他們到主文檔,您認爲合適的。要合併在審覈後的新變化,你會怎麼做:

git pull -s subtree wiki master 

不幸的是,合併改變了另一種方式是有點麻煩,而且不管怎麼說,你應該這樣做,因爲一次性的東西,然後關閉維基,或重定向到回購來源...

此外,這種方法的一個主要警告是git log wiki/Home.md(例如)實際上並沒有顯示從維基頁面的歷史。歷史在那裏是,但不知何故git-log無法跟蹤它。這是一個與git子樹相關的known limitation。解決此問題的另一個解決方案是執行filter-branch並定期合併一次以保留歷史記錄。

對我來說,將wiki作爲主要源代碼樹的一部分的主要優勢在於,可以跨代碼和文檔協調拉取請求和更改。它也使得使用代碼運送文檔變得非常簡單,而不是假設人們只是在線閱讀它...

+0

在我的情況下,我仍然需要'git push'讓我的wiki文件夾完全致力於主項目回購。 – hyip

+0

不知道爲什麼,但是'git log wiki /'沒有用這種技術顯示wiki的歷史記錄。我不明白爲什麼,因爲'git log --all' *會顯示這些變化...... – anarcat