Nahrávání webových aplikací na hostingový server může být kapitola sama pro sebe. Zvláště tomu tak je v případě, kdy na projektu spolupracuje více lidí. Používáte Git pro verzování souborů a FTP server jako úložiště aplikace? Potom vám může Git-ftp tento proces velmi usnadnit.
Git-ftp je FTP klient, který umožňuje pomocí Gitu nahrávat pouze změněné/přidané soubory a mazat odebrané. Při inicializaci uloží do souboru .git-ftp.log na server hash posledního commitu. Před každým dalším nahráním porovná vaši lokální větev proti uloženému hashi a nahraje pouze soubory, kterých se změny týkají.
Nastavení
Git-ftp je k dispozici pro Linux, OS X i Windows. Instalace je jednoduchá a její postup je popsán v dokumentaci. Po instalaci je k dispozici skrze příkazový řádek. Prvotní nastavení cílového FTP serveru se provádí v adresáři projektu příkazy:
# Adresa FTP serveru git config git-ftp.url "ukazka.cz:21" # Uživatelské jméno git config git-ftp.user "uzivatel" # Heslo git config git-ftp.password "heslo" # Cílový adresář (volitelné) git config git-ftp.remote-root "www/web-files"
Tím je nastavení uloženo do konfiguračního souboru Gitu (typicky .git/config). Nevýhodou je, že jsou citlivé údaje uloženy v textové formě. Výhodou, že jsou uloženy lokálně. Podporovány jsou i protokoly SFTP, FTPS, FTPES. Mimo jiné lze třeba nastavit cestu k SSH klíči nebo zakázat kontrolu certifikátu. Všechny možnosti nastavení naleznete v dokumentaci. Jakmile je nastavení uloženo, následnou inicializaci je možné provést dvěma způsoby:
1) Pokud začínáte na zelené louce a chcete nejprve nahrát všechny soubory:
git ftp init
2) Nebo už máte projekt nahraný a chcete ho pouze označit jako výchozí stav:
git ftp catchup
To je vše. Teď můžete vesele nahrávat!
Nahrávání
Změny nahrajeme příkazem:
git ftp push # Pro více informací o průběhu git ftp push --verbose
Před provedením pushe nesmí Git registrovat žádné ne-commitnuté změny. Na což vás Git-ftp v takovém případě upozorní. Při změně větve nebo checkoutu staršího commitu budou nahrány rozdíly té dané větve nebo commitu oproti verzi v uloženém hashi na serveru! Na to pozor zvláště, pokud nahráváte z více větví na různá prostředí. Commit nebo větev, kterou chcete nahrát, lze specifikovat argumenty:
# Specifikace commitu git ftp push --commit "e59ea5e433ce6f360083b7f074de5f8f000e4d65" # Nebo větve git ftp push --branch "development"
Scope
Protože je často potřeba udržovat projekt na několika místech najednou, umožňuje Git-ftp nastavit tzv. "scope" - prostředí. Pro jeden projekt tak lze nastavit více míst, kde bude nahráván. Pomocí argumentu specifikujeme kam.
# Nastavení dvou různých prostředí git config git-ftp.vyvoj.url "vyvoj.ukazka.cz" git config git-ftp.vyvoj.user "uzivatel_123" git config git-ftp.vyvoj.password "heslo_123" git config git-ftp.produkce.url "produkce.ukazka.cz" git config git-ftp.produkce.user "uzivatel_456" git config git-ftp.produkce.password "heslo_456" # Nahrání na dané prostředí git ftp push --scope "vyvoj" git ftp push --scope "produkce"
Výjimky
Stejně jako samotný Git, tak i Git-ftp má konfigurační soubor pro zákaz nahrávání určitých souborů a adresářů. Stačí vytvořit v kořenovém adresáři projektu soubor .git-ftp-ignore. Syntaxe zápisu je podobná jako u .gitignore používaného Gitem. Další příklady a více informací najdete v dokumentaci.
# .git-ftp-ignore # # Bude ignorovat obsah složky "cache" cache/* # Ignoruj soubor config.txt config.txt
Závěrem
Git-ftp je jednoduchý a užitečný nástroj. Tím, že je napsaný jako shell skript, jej můžete např. navázat na GIT hooky, použít v automatizačních nástrojích typu Gruntu nebo aplikacích jako Jenkins, CircleCI, BitBucket. Díky uložení informace o aktuální verzi na FTP serveru je možné nahrávat odkudkoliv a ve více lidech. Přesto autor zmiňuje, že Git-ftp nebyl navržen jako centralizovaný nástroj pro nasazování aplikací. Dokud není nahrávání dokončeno, soubory v daném commitu nesmí být nijak změněny! V opačném případě by jejich změny neseděly s verzí v Gitu.
Jak řešíte nasazování projektů vy? Podělte se s ostatními v komentářích.
K tomuto článku již není možné přidávat další komentáře
Komentáře
Díky za článek. My používáme Gitlab / Nette / Nettí deploy, ale tohle se taky může hodit v případě samostatných projektů (protože produkty 3 stran stojí vždy peníze).
Článek skvělý. Jen jsem narazil na problém, který se projevil chybami:
"Unknown SHA1 object" a případně "fatal: empty string is not a valid pathspec. please use . instead if you meant to match all paths". Podle diskuzí to souvisí s verzí gitu a vyřeší se to pomocí: "git config git-ftp.syncroot ."