2011-10-21 15 views
10

Opracowuję skrypty do obsługi moich baz danych bibtex i plików PDF.git tylko część repozytorium

Dla wygody zarządzam zarówno bazą danych, jak i skryptami w tym samym repozytorium git (coś, czego nie chcę zmieniać). Chciałbym jednak udostępnić moje skrypty (np. Na github), ale nie mojej bazy danych ani plików pdf. Nadal chcę mieć tę samą historię commitowania zarówno na github, jak i lokalnie dla skryptów.

Myślałem o posiadaniu gałęzi Github i popychanie tylko tej gałęzi. Ale w jaki sposób zaktualizowałbym gałąź z zatwierdzeniami wykonanymi dla skryptów w gałęzi głównej?

Czy są na to inne sposoby?

Odpowiedz

1

Ale w jaki sposób zaktualizowałbym gałąź z zatwierdzeniami wykonanymi dla skryptów w gałęzi głównej?

Cherry-pick zatwierdzenia odnoszące się do skryptów od master do oddziału publicznego. Lub edytuj skrypty w ich własnej gałęzi, a następnie scal zmiany w master, gdy ich potrzebujesz.

+0

ale czy zbiór wiśni nie dostanie tylko zmian wprowadzonych przez to zatwierdzenie? Załóżmy, że wykonałem kilka poprawek w master, niektóre odnoszące się do db do skryptów, musiałem się upewnić, że wybiorę wszystkie powiązane ze skryptem, prawda (nie tylko najnowsze)? Domyślam się, że oddzielna-gałąź-z-scalaniem jest lepszą alternatywą ... – thias

+0

@thias: dlatego zalecam tworzenie skryptów w publicznej gałęzi zamiast 'master'. Lub używając oddzielnych repozytoriów ... –

+0

ok, używam oddzielnego oddziału ... – thias

9

Można użyć git subtree, aby oddzielić katalog skryptów do ich własnej gałęzi (z pełną historią dla tego podkatalogu), którą następnie można przesłać do GitHub. Możesz ponownie uruchomić podtrekt git, aby zachować podzielone repozytorium na bieżąco.

Aby dać przykład, po zainstalowaniu git subtree można zrobić:

git subtree split --prefix script-directory --branch just-scripts 
git push github-scripts just-scripts:master 

... zakładając, że skrypty są w script-directory i github-scripts jest pilot, który wskazuje na adres URL swojej GitHub repozytorium przeznaczone tylko dla skryptów.

+0

To wygląda interesująco! Ale w jaki sposób zaktualizowałbym nowy oddział? A może po prostu usunę go po naciśnięciu i ponownie uruchomi komendy dla następnego naciśnięcia? – thias

+0

Możesz ponownie uruchomić tę samą komendę bez usuwania gałęzi i powinna ją zaktualizować (chyba). –

+0

@ Mark, po prostu zastanawiam się, czy można to zrobić w jednym wierszu - coś podobnego do git push --split subDir - ze względu na prostotę. – shabunc

1

Postępowałem zgodnie z radą udzieloną przez @larsmansa i okazało się to bardzo wygodne. Oto kilka szczegółów postępowania:


## getting the scripts into a separate branch for github 

# create a root branch 'scripts' 
git symbolic-ref HEAD refs/heads/scripts 
rm .git/index 
git clean -fdx # WARNING: all non-commited files, checked in or not, are lost! 
git checkout master script1.py script2.py 
git commit -a -m "got the original scripts" 
git checkout master 
git merge scripts 

# push the scripts branch to github 
$ git remote add github [email protected]:username/repo.git 
$ git push github scripts 

Teraz mogę rozwijać w scripts-gałęzi i scalania z oddziału głównego ilekroć muszę go do mojej bazy danych.

Jedna uwaga: Pierwsze scalenie po dodaniu nowego pliku znajdującego się w obu gałęziach spowoduje konflikt (ponieważ gałąź skryptów jest gałęzią główną). Najlepiej jest uzyskać skrypty z gałęzi głównej i natychmiast je zatwierdzić.

Powiązane problemy