git, svn, mercurial

Git bundle a mers, dar operatia de unbundle este un pic ... ciudata. Nu asa ma asteptam sa mearga, desi probabil face sens din perspectiva altora.

Alta:
S-a facut un patch/commit in linux kernel master branch care repara un bug oarecare, apoi s-a facut si un backport pentru v5.15. Backport-ul se pare ca nu rezolva problema de unul singur. Mai lipseste ceva.
Cum fac un git bisect pe master branch, dar aplicand de fiecare data patch-ul?
 
Faci bisect normal și aplici patch-ul manual cu "git cherry-pick --no-commit". Dar de ce nu folosești un kernel LTS?
 
Am clonat de pe github linux-ul din doua surse diferite: ala mainline si ala de la rockchip. Gasesc diferente majore intre anumite fisiere importante pentru ce ma intereseaza pe mine (vreo 5 fisiere).
Vreau sa:
- gasesc punctul comun intre cele doua linux-uri, daca exista, sau macar un punct unde diferentele sunt minime
- import commit-urile de la rockchip care afecteaza fisierele interesante, incepand de la punctul comun, sub forma unui branch in linux mainline - automat, ca manual m-as descurca.
Cum fac?
Multumesc.
 
Probabil ce vrei la prima e https://git-scm.com/docs/git-merge-base, dacă rockchip e fork din linux ar trebui să poți să-l pui ca upstream și să faci fetch pe el (ca să meargă merge base).

Pentru a doua ai nevoie de ceva scripting, în principal git log cu follow pe fișierele "interesante" și cherry pick. Vezi și pretty la git log ca să scoți lista de commits per fișier, pe care le bagi în cherry pick pe urmă. Dar dacă vrei să faci același lucru pe mai multe fișiere o să fie un pic tricky la ordonare (follow merge cu un singur fișier). Of course, cherry pick poate să nu includă chestii care sunt utile din alte fișiere modificate (care nu apar în lista ta), că nu asta e treaba lui.
 
N-a mers. Sunt zeci sau sute de commit-uri, unele dintre ele duplicate in ambele parti. Au facut cherry-pick din mainline in loc de rebase. :(
 
git:
Cum fac checkout la toate fisierele dintr-un director unde majoritatea au fost sterse (git rm). Nu exista un commit care sa le contina pe toate simultan. Se presupune ca fisierele n-au fost modificate, ci doar adaugate pe rand si sterse cele vechi pe masura ce s-au adaugat altele mai noi. Se presupune si ca au avut toate nume unice.
Git-ul in cauza este https://github.com/gentoo/gentoo

Multumesc!
 
Nu există ceva built-in pentru asta. Ce poți să faci într-un script e să iei toate commit-urile care au atins calea aia (git log <path>) și pe urmă reset către cel mai nou commit, copiezi în altă parte toate fișierele din calea respectivă, treci la următorul commit.
 
Back
Top