2015-09-16 17 views
8

Obecny projekt, nad którym pracuję, jest ograniczony do jednego repozytorium git. Mój aktualny katalog roboczy wygląda mniej więcej tak:Git: Jak przenieść podkatalog do oddzielnego oddziału tego samego repozytorium

dist/ 
    *distribution files 

src/ 
    *src files 

mamy serwer Azure skonfigurowany do automatycznego rozmieszczania nic popychany do „wdrożyć” oddział naszej repo. Tak więc celem jest przeniesienie plików src do systemu głównego i zawartość folderu dist do gałęzi "wdrażanie".

Co robiłem do tej pory to rozgałęzienie master, usunięcie folderu src i przeniesienie zawartości folderu dist do katalogu głównego przed wysłaniem do wdrożenia.

Wiem, że najlepiej byłoby mieć oddzielne transakcje repo, ale obecnie nie jest to możliwe. Czy istnieje prostszy sposób na zrobienie tego?

Odpowiedz

8

Polecenie git-subtree działa doskonale na to. Z master gałęzi zrobić:

git subtree split --branch deploy --prefix dist/ 

wystarczy uruchomić tego polecenia za każdym razem, gdy chcesz zaktualizować deploy oddział. Spowoduje to scalenie każdego zatwierdzenia w podreirze dist (z bieżącym odgałęzieniem - prawdopodobnie master) z katalogiem głównym deploy i zachowanie pełnej historii zatwierdzania. Zauważ, że tylko zmiany w subdirie dist zostaną scalone. Jeśli zatwierdzenie zawiera zmiany zarówno do subdiru dist, jak i innych plików w repo, uwzględniane są tylko zmiany w subdirie dist.

Najtrudniejszą częścią jest instalacja. Jak rozumiem, polecenie jest dołączone do git 1.7.11 i wyżej. Jest jednak w poddrzewie "contrib", więc nie jest domyślnie instalowany. Wyszukaj "git-subtree" w menedżerze pakietów twojego systemu i zainstaluj pakiet, jeśli istnieje. Jeśli nie, lub jeśli używasz starszej wersji git, najprostszym sposobem, jaki znalazłem, jest zainstalowanie git-subtree od autora repo.

git clone https://github.com/apenwarr/git-subtree.git 
cd git-subtree/ 
make install 

Po to masz zainstalowany, można robić różne fajne rzeczy z nim, jak wyjaśniono w docs.

+0

Działa doskonale. Dzięki stary. – Lawren

+2

Czy jest jakiś sposób na zrobienie tego samego, ale kiedy pliki kompilacji lub 'dist' są w' .gitignore' i trzymane z dala od wzorca? Aby wyjaśnić, chcę tylko pliki dist w gałęzi wdrażania i chcę tylko pliki src w systemie głównym. – Lawren

Powiązane problemy