Van egy project ami gitet hasznal. Ebben vegzett modositasaimat szeretnem egy sajat git repoban tarolni. Ilyenkor a nagykonyv azt mondja, hogy git clone ..., git remote add origin sajatrepo.git, git remote add upstream eredetirepo.git, es szepen merge/push-al lehet szorakozni. Igen am, de ha tobb helyen dolgozok vele (asztaligep, noti), akkor mindenhol kene ez a bohockodos.
En egy olyat szeretnek, hogy a sajat repomba lenne egy upstream nevu branch, ami az eredeti project master aga. (ezt egy cron job frissitgetne), es akkor az asztali gepen/notin eleg csak az upstreamet merge-lni a master agba.
Nade googlevel sem talaltam meg a parancsot, amivel megmondhatom, hogy az en upstream agam az eredeti project masterje. (illetve mivel tudom frissiteni)
Valaki guru segitsen!
Kosz,
Elbandi
- 1241 megtekintés
Hozzászólások
Na most valamit nem ertek. Attol, hogy neked van egy remote-d, attol meg a lokalis, "kiklonozott" repodba ugyanugy tudsz kommittolni, nem kell ahhoz a sajat gepeden is egy "remote"
Tehat:
mkdir ~/Projects/myproj
cd ~/Projects/myproj
git init
touch x
git add x
git ci -m 'Initial commit'
git remote add origin ssh://git@server.com/myprojekt.git
git push origin master
git co -b work
# hackhack
git ci -m "A lot of hacks"
git co master
git merge work # or git merge --squash work
git push origin master
Szoval igy. Attol te meg dolgozhatsz a sajat branch-eden, es kommittolgathatsz oda, az nem fog felkerulni a remote -ba.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
"Ilyenkor a nagykonyv azt mondja, hogy git clone ..., git remote add origin sajatrepo.git, git remote add upstream eredetirepo.git"
Heh. Ezt egyáltalán nem értem. Melyik nagykönyv mond ilyet!? A git clone ...
pontosan mit klónoz? Miért adod hozzá a saját repódat remote-ként, pláne miért mint origin?
"En egy olyat szeretnek, hogy a sajat repomba lenne egy upstream nevu branch, ami az eredeti project master aga. (ezt egy cron job frissitgetne), es akkor az asztali gepen/notin eleg csak az upstreamet merge-lni a master agba."
Miért akarsz egy upstream nevű branchet a saját repódba? Szerintem egyáltalán nincs rá szükség. git merge <upstream repo remote-ja>/master
ugyanazt fogja merge-elni.
"Nade googlevel sem talaltam meg a parancsot, amivel megmondhatom, hogy az en upstream agam az eredeti project masterje. (illetve mivel tudom frissiteni)"
Talán a remote tracking branch-re gondolsz, de nem vagyok benne biztos, mert nem igazán értem, hogy mit szeretnél. Erről git branch --track alatt olvashatsz ezt-azt, frissíteni pedig git fetch/pull <upstream repo remote-ja> master:upstream
paranccsal tudod. De mint mondottam volt, szerintem nincs szükséged upstream nevű branchra.
- A hozzászóláshoz be kell jelentkezni
Igy szedem le a cuccot:
git clone -o upstream git://git.netfilter.org/iptables.git
git remote add origin http://sajatserver.hu/ittvanagitem.git
git push --all
Ez ugy leszed mindent az iptables.git-rol majd feltolja a sajat repomba.
ha kell valami merge, akkor valoban git merge upstream/master.
De en azt szeretnem, ha a cronjob elvegezne a piszkos munkat: az sajat repomban az upstream agat mindig frissen tartana az eredeti repohoz. (ezzel savszelt is sporolnak, nemkell hozzam letolteni a upstream valtozas, majd visszatolteni a szerveremre)
Lenyegeben ennyire akarom leroviditeni az upstream kovetest:
git fetch
git merge upstream (vagy ha jobban tetszik: git merge origin/upstream)
git push origin master
Elbandi
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Ezt a reszet a merge conflict miatt nem lehet automatizalni sajnos...
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Ok, aludtam rá egyet, és mostmár lehet, hogy értem, hogy mit is szeretnél csinálni. Persze az is lehet, hogy mégse, de akkor majd szólsz.
Szerintem ezt úgy kellene, hogy:
localhost$ ssh sajatszerver
# --bare, mert sajatszerveren nem akarsz worktree-t, mert egyrészt minek, másrész worktree-s repo-ba push-olás nem okos dolog
sajatszerver$ git clone --bare git://git.netfilter.org/iptables.git
sajatszerver$ cd iptables.git
# --bare nem állít be remote-ot, neked kell; a szerveren az eredeti iptables repo az origin
sajatszerver$ git remote add origin git://git.netfilter.org/iptables.git
sajatszerver$ git branch upstream
# crontab szerkesztés (;
# ez majd az eredeti iptables repo master ágát behúzza a sajatszerver repojának upstream ágába
# felteszem netfilter team nem írja át a history-t (pl. rebase, reset --hard), úgyhogy ez mindig fast-forward lesz, nem lesz konfliktus, nem kell --force
sajatszerver$ echo 'git fetch origin master:upstream' >>/etc/cron.daily/iptables_fetch
sajatszerver$ logout
# sima clone; a sajatszerver repoját automatikusan beállítja originnek
localhost$ git clone ssh://sajatszerver/iptables.git
# eltelt két nap
localhost$ cd iptables
# leszedi sajatszerver upstream-jéből az új commitokat
localhost (master)$ git fetch
localhost (master)$ git merge origin/upstream
# elküldi a merge commitot a sajatszerver master-ébe
localhost (master)$ git push
Nem tudom, hogy milyen jellegűek a változtatásaid, hogy esetleg be szeretnéd-e küldeni őket upstreamnek, stb; de lehet, hogy a localhostos merge-elés helyett rebase praktikusabb lenne...
- A hozzászóláshoz be kell jelentkezni
Koszi, a sajat "tesztem" alapjan ugy mukodik ahogy szeretnem.
Es talaltam egy hook-ot, amivel megakadalyozom, hogy upstream agba veletlenul beleirjak.
Upstreambe nem akarok kuldeni semmit, ezek joreszt finomitgatasok/haxxok a sajat rendszeremhez.
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni