Git-ftp - nahrávání projektu na FTP server

2 Git, Windows, Linux

Git-ftp je nástroj, který pomocí Gitu řeší nahrávání změněných souborů na server. Co vše umí a kdy ho použít?

Git-ftp - nahrávání projektu na FTP server

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