Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: pavel plojhar 19. 11. 2012, 21:31:16
-
Zdravím.
Existuje v Gitu příkaz, který mi vyexportuje (ideálně do samostatného archivu) souboru u kterých došlo ke změně za zvolené období?
Příklad:
Přidávám do webového portálu novou funkčnost. Abych nemusel všechny soubory znovu nahrávat na server, vytáhlo by mi to pouze soubory, které se změnily.
Díky :)
-
No jistě, to dělá git diff. Stačí ho doplnit třeba o hashe dvou commitů a vysype, co se změnilo. Pokud chceš jen názvy souborů, přidej parametr --name-only.
-
nejak mam pocit, ze pouzivas git jen lokalne. protoze jinak bys to neresil. Doporucuju: push local -> git server a pak na www serveru zase lokalni git natahne soubory z git serveru
-
Nejjednodušší je mít i na serveru git repozitář a provádět na něj push. Tím se přenesou jen změny.
BTW: nejjednodušší způsob, je nainstalovat do bare repo (třeba v gitolite) takovýto post-receive hook:
$cat repo.git/hooks/post-receive
#!/bin/sh
echo "*** Publishing new repository status in webroot ***"
GIT_WORK_TREE=/var/www/webroot/ git checkout -f
Jinak na přenos změn by nejspíš měl fungovat git-bundle (http://git-scm.com/docs/git-bundle), ale nezkoušel jsem to, tak nemám blužší informace.
-
Zdravim, mozna pomuze tento skript:
#!/bin/bash
if [ $# != 3 ];
then echo Usage: $0 "<OLD_REV> <NEW_REV> <ARCHIVE_NAME>"
exit -1;
fi
OLD_REV=$1
NEW_REV=$2
ARCHIVE_NAME=$3
CURRENT_ID=`git rev-parse HEAD`
FILE_LIST=`git diff --name-only ${OLD_REV} ${NEW_REV}`
git checkout ${NEW_REV} &&
echo ${FILE_LIST} | xargs tar cvjf ${ARCHIVE_NAME} &&
git checkout ${CURRENT_ID}
exit 0
Vytvori tar.bz2 archiv s nazvem ARCHIVE_NAME obsahujici nejaktualnejsi podobu tech souboru, ktere se zmenily mezi revizemi OLD_REV a NEW_REV
-
Skritp dotazeny do 100% podoby neni, treba soubory, ktere se pridaly a pak smazaly, v archivu nebudou. Ale mozna to tak chcete, moc jste to neupresnil, tak nevim. Jeste jsem zapomnel podotknout, ze aby skript fungoval, je treba mit cisty pracovni adresar.
-
git whatchanged
;)
-
Ano, git používáme pouze lokálně v síti a z internetu se do gitu nedostanu.
Máme pouze klasický hosting, kam je možné se dostat pouze přes FTP (používáme Windows).
Příklad použití: do hotového projektu chceme dodělat novou funkčnost. Několik lidí si rozebere úkoly a zapracuje je. Všechny změny nahrají do Gitu.
Abychom nemuseli nahrávat úplně všechny souboru znovu přes FTP (opravdu veliký projekt), chtěli bychom nahrát pouze soubory které se od poslední stabilní verze (než jsme implementovali novou funkčnost) změnily.
Takže by mi pomohl nástroj kam bych zadal hashe revizi a on by mi do archivu zabalil pouze soubory, které se změnily.
Neznáte nějaký takový nástroj?
Děkuji za rady
-
git bundle
Velice praktické, když git nemá přístup na net (např. aktualizace verze za firewallem u klienta, kdy je k dispozici jen scp - nejlépe ještě přes windows v citrixu :-) )
git bundle create bundlefile tag-od-posledniho-prenosu..stable
V gitu u klienta nastavíš repozitory na ten soubor a pracuješ s ním, jako se vzdáleným repozitářem
git pull
Postup např.
http://stackoverflow.com/questions/3635952/how-to-use-git-bundle-for-keeping-development-in-sync
...
-
Zdravím.
Existuje v Gitu příkaz, který mi vyexportuje (ideálně do samostatného archivu) souboru u kterých došlo ke změně za zvolené období?
Příklad:
Přidávám do webového portálu novou funkčnost. Abych nemusel všechny soubory znovu nahrávat na server, vytáhlo by mi to pouze soubory, které se změnily.
Díky :)
rsync ;-)
-
1. https://github.com/git-ftp/git-ftp mi funguje celkom dobre, ale iba jednym smerom, z lokalu na server.
2. mirror prikaz v lftp je genialny a funguje oboma smermi (az na to ze lftp je pomaly a skopiruje vsetky subory kde sa zmenil datum aj ked sa nezmenil obsah - preto je dobra ta kombinacia s git-ftp, ktory je ovela rychlejsi ). Len ho treba poriadne odladit aby si si neprepisal .git, aby si nezverejnil git repozitar na serveri a tak dalej.