Zależności projektu Git w GitHub

14

Napisałem platformę PHP i CMS na samej ramie. CMS jest zależny od frameworka, ale frameworka istnieje jako samodzielny folder w plikach CMS. Chciałbym zachować je jako osobne projekty w GitHub, ale nie chcę mieć problemów z aktualizowaniem projektu CMS przy każdej aktualizacji frameworka. Idealnie byłoby, gdyby CMS w jakiś sposób pobierał pliki frameworka w celu włączenia ich do predefiniowanego podkatalogu, zamiast fizycznego popełniania tych plików.

Czy jest to możliwe dzięki Git / GitHub? Jeśli tak, to co muszę wiedzieć, aby działało? Pamiętaj, że mam bardzo, bardzo podstawowy poziom doświadczenia z Git - mogę tworzyć repozytoria i zatwierdzać za pomocą wtyczki Git dla Eclipse, łączyć się z GitHub i tyle. Obecnie pracuję solo nad projektami, więc do tej pory nie musiałem się dużo więcej uczyć o Git, ale chciałbym otworzyć go na innych w przyszłości i chcę się upewnić, że mam rację.

Jaki powinien być mój idealny przepływ pracy dla projektów z zależnościami? Wszelkie wskazówki na ten temat również byłyby bardzo mile widziane. Jeśli potrzebujesz więcej informacji o mojej konfiguracji, po prostu zapytaj w komentarzach.

VirtuosiMedia
źródło
Sprawdź poddrzewo git, o czym mówiono tutaj: blogs.atlassian.com/2013/05/…
Nick

Odpowiedzi:

11

Po pierwsze, jeśli naprawdę chcesz do tego użyć git, zastanów się nad użyciem jego funkcji Submodule :

Obsługa podmodułów Git pozwala repozytorium zawierać, jako podkatalog, zamówienie zewnętrznego projektu. Podmoduły zachowują własną tożsamość; obsługa podmodułów po prostu przechowuje lokalizację repozytorium podmodułu i identyfikator zatwierdzenia, więc inni programiści, którzy sklonowali zawierający projekt („superprojekt”), mogą z łatwością sklonować wszystkie podmoduły w tej samej wersji. Możliwe są częściowe realizacje superprojektu: możesz powiedzieć Gitowi, aby nie klonował żadnego, części lub wszystkich submodułów.

Strona z linkami zawiera szczegółową dyskusję, w tym przykłady tego, jak dokładnie z niej korzystać.

Powiedziałbym, że nie polecam używać systemu kontroli wersji do zarządzania zależnościami, a raczej zacznę korzystać z narzędzia do kompilacji, które poradzi sobie z tymi rzeczami, takimi jak Maven lub Ant . Istnieje nawet narzędzie do budowania specyficzne dla PHP o nazwie Phing , ale sam jeszcze go nie używałem. Wspomniano o tym w artykule omawiającym twoje pytanie: Kontrola wersji! = Zarządzanie zależnościami .

Powodem, dla którego narzędzia kompilacji mogą być lepiej dopasowane na dłuższą metę, jest to, że często obsługują one również różne typy repozytoriów, biblioteki zewnętrzne (i różne lokalizacje) oraz szczegółowe sprawdzanie. Jeśli jednak chcesz po prostu zintegrować te dwie biblioteki i nie chcesz dodatkowych kłopotów, podejście do podmodułów jest prawdopodobnie wystarczające.

Deckard
źródło
+1 - Dzięki Deckard. Uznałem, że Git ma coś podobnego do Submodułów, po prostu nie wiedziałem, jak to się nazywa. Na pewno przyjrzę się długo Phingowi. Chciałem narzędzia do kompilacji PHP, które zarządza zależnościami, uruchamia testy jednostkowe, a następnie wdraża je w mojej witrynie. Wygląda na to, że Phing prawdopodobnie to wszystko. Wygląda również na to, że nauka zajmie trochę czasu. Czy znasz jakieś dobre screencasty dla Phinga (Google nie jest w tym względzie uprzejmy)?
VirtuosiMedia
Link do „Funkcji podmodułu” jest zepsuty, a link do „Kontrola wersji! = Zarządzanie zależnościami” również jest zepsuty
Ferrybig
6

Submodules Git to świetny sposób zarządzania zależnościami projektu git.

Jeśli szukasz innego podejścia:

Kompozytor może zrobić to wszystko za Ciebie. Kompozytor jest menedżerem zależności dla php. Jego składnia to json. Jest raczej łatwy i tani w użyciu.

Więcej o kompozytorze:

Composer to narzędzie do zarządzania zależnościami w PHP. Pozwala zadeklarować biblioteki zależne, których potrzebuje Twój projekt, i zainstaluje je dla Ciebie.

Na stronie dokumentacji można znaleźć przykład budowy pliku composer.json:

// Composer.json    
{

    "name": "acme/blog",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/composer/hello-world"
        }
    ],
    "require": {
        "acme/hello-world": "dev-master"
    }
}

Po utworzeniu pliku composer.json i composer.lock dla projektu możesz łatwo zainstalować zależności:

composer.phar install lub zaktualizuj je: composer.phar update lub utwórz konkretny projekt z packagist : composer.phar create-project acmeproject

chrisjlee
źródło
1

Ostatnio zacząłem używać narzędzia o nazwie Pundle do zarządzania zależnościami mojego projektu. Obsługuje wersję PHP, pakiety PEAR, repozytoria Git i repozytoria SVN jako zależności i pozwala łatwo je określić za pomocą „pliku Pundlefile”.

Powinieneś także skonfigurować swoje zależności, aby kasy Git / SVN były umieszczane w katalogu, który nie jest pod kontrolą wersji (np. „Sprzedawca”), abyś mógł zacząć od nowa przy każdym kasie i aby utrzymać repozytorium projektu.

chh
źródło