2011-08-04 11 views
37

Chcę zachować cały mój kod źródłowy i dokumentację w jednym repozytorium git. Mam już strony github zintegrowane z moim głównym projektem i teraz chcę zrobić to samo z wiki github.Jak zintegrować wiki GitHub do głównego projektu

Wiem, że github wiki są zwykłymi repozytoriami git. Moim planem jest dodanie wiki jako pilota do mojego głównego repozytorium i trzymanie wszystkiego w jednym miejscu. Jednak w repozytorium wiki wszystko znajduje się w katalogu głównym i tym samym zaśmiecałoby mój główny projekt.

Czy ktoś próbował już wcześniej? Jaki jest najlepszy sposób, aby sobie z tym poradzić?

+0

Udałem się z modułem częściowym. Dzięki za odpowiedzi. –

+1

Jak to działa z wiki jako modułem częściowym? Chcę zrobić coś podobnego, ale nie zakręciłem głową wokół modułu częściowego. Jak poradziłbym sobie z rozgałęzianiem i łączeniem, ponieważ chciałbym mieć "rozwiniętą" gałąź mojego kodu z tym samym dla wiki, więc kiedy scalę to z moją główną gałęzią, scaliłoby to również zmiany w gałąź wiki na żywo. –

+0

Ale jaki jest sens posiadania tego podmodułu?Nikt inny nie może go modyfikować ani używać. Czy możesz go używać w dowolnym miejscu poza githubem? Chodzi mi o to, że możesz go mieć w oddzielnym katalogu jako repozytorium github i po prostu .gitignore tego katalogu z głównego repo. – jayarjo

Odpowiedz

32

Chcesz dodać wiki jako submodule. Samo repozytorium git Wiki połączone jako pilot, ale w podkatalogu z własnym repozytorium .git.

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

W głównym repozytorium, aby dodać wiki repo jako moduł podstrony w wiki/dir.

+7

Obecnie jest to w rzeczywistości 'git: // github.com/you/proj.wiki' – cregox

+2

Czy pozwala to na to, aby zmiany wprowadzone w wiki były widoczne na karcie wykresów? – devlord

3

Można utworzyć submodule z repozytorium wiki lub pobrać i przełączać gałęzie tam iz powrotem.

5

Uważam, że wszystko to jest dość nudne - moim zdaniem, strony wiki github powinny być gałęziami głównego repozytorium, a przynajmniej powinno być możliwe zrobienie tej opcji.

Niemniej jednak uważam, że najlepszym rozwiązaniem jest po prostu ruch wiki do głównego repozytorium, powiedzmy w docs/ lub wiki używając subtree merge. Na przykład, zakładając, że twoje repozytorium to you/proj, twoje wiki będzie miało postać: git://github.com/you/proj.wiki. Następnie scalić je w głównym repo, zrobiłbyś:

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/" 

Można nawet trzymać wiki pracy na stronie powitać wkładów publicznych tam, ale potem weterynarza je do głównej dokumentacji zgodnie z potrzebami. Aby scalić nowe zmiany po przeglądzie, zrobiłbyś:

git pull -s subtree wiki master 

Niestety, łączenie zmienia Innym sposobem jest nieco trudniejsze, a tak czy inaczej, powinieneś zrobić to jako rzecz jeden raz, a następnie zamknij wiki, lub przekierowanie do źródła repo ...

Co więcej, głównym zastrzeżeniem tego podejścia jest to, że git log wiki/Home.md (na przykład) faktycznie nie pokazuje historii ze strony wiki. Historia jest tam, ale w jakiś sposób git-log nie może go śledzić. Jest to known limitation związane z poddrzewami git. Innym rozwiązaniem tego problemu byłoby zrobienie filter-branch i regularne scalanie, jednorazowo, aby zachować historię.

Dla mnie główną zaletą posiadania wiki jako części głównego drzewa źródłowego jest to, że żądania ciągnięcia i zmiany mogą być koordynowane między kodem i dokumentacją. To również sprawia, że ​​wysyłanie dokumentacji za pomocą kodu jest banalnie proste, zamiast zakładać, że ludzie po prostu przeczytają ją online ...

+0

W moim przypadku nadal potrzebuję 'git push', aby moje foldery wiki były całkowicie zaangażowane w główne repo projektu. – hyip

+0

nie wiem dlaczego, ale 'git log wiki /' nie pokazuje historii wiki za pomocą tej techniki. nie rozumiem dlaczego, ponieważ 'git log - all' * does * pokazuje te zmiany ... – anarcat

Powiązane problemy