Kirjoittaja Aihe: Git-kysymyksiä  (Luettu 537 kertaa)

Snufkin

  • Käyttäjä
  • Viestejä: 665
    • Profiili
Git-kysymyksiä
« : 26.09.25 - klo:11.02 »
Tuo Git/gitlab minulle aika uusi juttu, joten tällainen kysymys.

Minulla on oma kotirepo (kotikoneella: git init) ja se on yhdistettynä Gitlabin etärepooni. Tein tämän git clone-komennolla. Nyt olisi tarve hakea tiedostoja toisesta ulkoisesta (julkisesta) reposta ilman että siihen repoon syntyy minkäänlaista linkkiä. Siis ikään kuin pelkkä download. Onko siinä nyt sitten git fetch -oikea komento? Vai onko vain parempi dowloadata noita graafisen käyttöliittymän kautta?

Onko niin että tuo git clone muodostaa aina jonkunlaisen remoten systeemiin? Mitä tapahtuu jos cloonaa usemman ulkoisen repon?
Xubuntu 22.04 LTS, Fujitsu Lifebook E754

nm

  • Käyttäjä
  • Viestejä: 16779
    • Profiili
Vs: Git-kysymyksiä
« Vastaus #1 : 26.09.25 - klo:11.33 »
git clone on normaali tapa kopioida mikä tahansa ulkoinen git-repositorio omalle koneelle. Siinä muodostuu samalla yhteys etärepositorioon, remote-nimellä origin. Jos sinulla ei ole kirjoitusoikeutta, et voi kuitenkaan lähettää paikallisia muutoksia sinne (git push).

Halutessasi voit myös poistaa paikallisesta kopiosta remote-yhteyden alkuperäiseen repositorioon komennolla:

Koodia: [Valitse]
git remote rm origin


Git fetch-komento hakee repositorion määritellystä remote-lähteestä viimeisimmät muutokset käytössä olevaan haaraan, mutta ei ylikirjoita paikallisia muutoksia. Git fetch + git merge = git pull.


Mitä tapahtuu jos cloonaa usemman ulkoisen repon?

Jokainen omalle koneelle kloonattu repositoriohakemisto on oma erillinen repositorionsa. Niillä ei ole paikallisesti kytköksiä toisiinsa, ellet kloonaa paikallista repositoriota uudelleen. Gitin repositoriokohtaiset tiedostot, kuten repositorion koko muutoshistoria, sijaitsevat repositoriohakemiston alihakemistossa .git
« Viimeksi muokattu: 26.09.25 - klo:11.39 kirjoittanut nm »

Snufkin

  • Käyttäjä
  • Viestejä: 665
    • Profiili
Vs: Git-kysymyksiä
« Vastaus #2 : 26.09.25 - klo:11.48 »
Git fetch-komento hakee repositorion määritellystä remote-lähteestä viimeisimmät muutokset käytössä olevaan haaraan, mutta ei ylikirjoita paikallisia muutoksia. Git fetch + git merge = git pull.
Mitä tapahtuu jos cloonaa usemman ulkoisen repon?
Jokainen omalle koneelle kloonattu repositoriohakemisto on oma erillinen repositorionsa. Niillä ei ole paikallisesti kytköksiä toisiinsa, ellet kloonaa paikallista repositoriota uudelleen. Gitin repositoriokohtaiset tiedostot, kuten repositorion koko muutoshistoria, sijaitsevat repositoriohakemiston alihakemistossa .git

Ok, eli yhdellä kotirepolla voi olla vain yksi etärepo, jonka nimi on tuo origin.

Eli tapauksessani tuo fetch voisi toimia, koska en halua liitää niitä mihinkään, hakea vain eräänlaista koodin templateja.

Xubuntu 22.04 LTS, Fujitsu Lifebook E754

nm

  • Käyttäjä
  • Viestejä: 16779
    • Profiili
Vs: Git-kysymyksiä
« Vastaus #3 : 26.09.25 - klo:12.08 »
Ok, eli yhdellä kotirepolla voi olla vain yksi etärepo, jonka nimi on tuo origin.

On mahdollista olla monta remotea, mutta silloin jokaisen remoten pitäisi olla ainakin osittain toisiaan vastaavia lähteitä, eli niissä on identtisiä haaroja, joita kehitetään samassa tahdissa. Tämä ei ole kovin tavanomaista gitin käyttöä, mutta isoissa projekteissa voi törmätä monenmoisiin tarpeisiin.

Origin on oletusnimi kloonatun repositorion lähteelle.


Eli tapauksessani tuo fetch voisi toimia, koska en halua liitää niitä mihinkään, hakea vain eräänlaista koodin templateja.

Fetch hakee viimeisimmät muutokset normaalista origin-lähteestä (tai muusta remotesta). Erona git pulliin se ei tee mergeä, vaan muutokset tallentuvat paikallisen repositorion sisäiseen commit-historiaan. Paikallisia hakemistossa näkyviä tiedostoja ei muuteta, eli tiedostoselaimella katsottuna tilanne näyttää samalta kuin ennen git fetch -komentoa. Vasta git merge tai vaikkapa paikallisten muutosten hylkääminen komennolla "git reset --hard origin/main" tuo muutokset näkyviin.


Nyt kuulostaa siltä, että haluat hakea koodia jostain muusta kuin omasta git-repositoriostasi. Silloin oikea ratkaisu on kloonata lähderepositorio toiseen kansioon ja kopioida haluamasi tiedostot sieltä omaan repositorioosi. Voit myös ladata yksittäisiä tiedostoja suoraan GitHubin tai GitLabin web-käyttöliittymän kautta.

Snufkin

  • Käyttäjä
  • Viestejä: 665
    • Profiili
Vs: Git-kysymyksiä
« Vastaus #4 : 26.09.25 - klo:12.18 »
Nyt kuulostaa siltä, että haluat hakea koodia jostain muusta kuin omasta git-repositoriostasi. Silloin oikea ratkaisu on kloonata lähderepositorio toiseen kansioon ja kopioida haluamasi tiedostot sieltä omaan repositorioosi. Voit myös ladata yksittäisiä tiedostoja suoraan GitHubin tai GitLabin web-käyttöliittymän kautta.

Juu, juuri tämä on tarpeeni:

julkinen repo (templatet) -> oma repo -> koodin muokkaus  -> oma repo -> oma etärepo.

Tuo on hyvä idea, että teen oman reponi kansiolle rinnakkaisen kansion ja kloonaan sinne tuon template-repon. Sitten git pull -komennolla saan sieltä uudet koodit ja loppu toiminta sitten normaalia tiedoston siirtelyä omalla koneella.

Xubuntu 22.04 LTS, Fujitsu Lifebook E754

nm

  • Käyttäjä
  • Viestejä: 16779
    • Profiili
Vs: Git-kysymyksiä
« Vastaus #5 : 26.09.25 - klo:13.23 »
Juu, juuri tämä on tarpeeni:

julkinen repo (templatet) -> oma repo -> koodin muokkaus  -> oma repo -> oma etärepo.

Tuo on hyvä idea, että teen oman reponi kansiolle rinnakkaisen kansion ja kloonaan sinne tuon template-repon. Sitten git pull -komennolla saan sieltä uudet koodit ja loppu toiminta sitten normaalia tiedoston siirtelyä omalla koneella.

Kyllä, juuri näin.

Snufkin

  • Käyttäjä
  • Viestejä: 665
    • Profiili
Vs: Git-kysymyksiä
« Vastaus #6 : tänään kello 18:10 »
Palaan vielä tähän aiheeseen. Teen Tampereen yliopiston Git-kurssia ja siellä neuvotaan näin:

Lainaus
1. Lisää tietovarastoosi uusi etätietovarasto https://course-gitlab.tuni.fi/git-course/basics-materials.git

2. Nouda etätietovaraston versiohistoria ja yhdistä se omaasi. Huom. Koska tietovarastoilla ei ole yhteistä esi-isää, joudut antamaan merge-operaatiota varten --allow-unrelated-histories. Ensimmäisen kerran, kun haet sisältöä etätietovarastosta git kysyy

    hint: You have divergent branches and need to specify how to reconcile them.
    hint: You can do so by running one of the following commands sometime before``
    hint: your next pull:
    hint:
    hint:   git config pull.rebase false  # merge
    hint:   git config pull.rebase true   # rebase
    hint:   git config pull.ff only       # fast-forward only
    hint: You can replace "git config" with "git config --global" to set a default
    hint: preference for all repositories. You can also pass --rebase, --no-rebase,
    hint: or --ff-only on the command line to override the configured default per
    hint: invocation.
    fatal: Need to specify how to reconcile divergent branches.

3. Aja komento git config pull.rebase false edetäksesi.

En lukuisista yrityksistä huolimatta saa tuota toimimaan. Itse tiedostot saan kyllä haettua (toiseen kansioon tai download zip) mutta en mitenkään saa tuota toista etärepoa yhdistettyä omaan valmiseen repooni.

Onko tällaiselle yhdistämiselle oikeaa tarvetta vai onko tämä jotain akateemista kikkailua?
Xubuntu 22.04 LTS, Fujitsu Lifebook E754

nm

  • Käyttäjä
  • Viestejä: 16779
    • Profiili
Vs: Git-kysymyksiä
« Vastaus #7 : tänään kello 18:23 »
Onko tällaiselle yhdistämiselle oikeaa tarvetta vai onko tämä jotain akateemista kikkailua?

Näyttää enemmän kikkailulta. En muista, että itselläni olisi töissä koskaan ollut tarvetta yhdistää repositorioita, joilla ei ole yhteistä historiaa, vaikka niitä olisi kymmeniä liittyen samaan ohjelmistoon.

Toki siinä vaiheessa, jos päädyttäisiin monorepo-tyyppiseen uudelleenorganisointiin, tuollainen operaatio pitäisi tehdä kaikille yhteen koottaville alirepositorioille.
« Viimeksi muokattu: tänään kello 18:25 kirjoittanut nm »

Snufkin

  • Käyttäjä
  • Viestejä: 665
    • Profiili
Vs: Git-kysymyksiä
« Vastaus #8 : tänään kello 18:30 »
Näyttää enemmän kikkailulta. En muista, että itselläni olisi töissä koskaan ollut tarvetta yhdistää repositorioita, joilla ei ole yhteistä historiaa, vaikka niitä olisi kymmeniä liittyen samaan ohjelmistoon.

Ok, kiitos. Minä kikkailen takaisin ja pushaan sinne tarkastukseen manuaalisesti kyhätyt versiot. Jotain iloa noista automaattitarkastuksistakin - eivät tiedä, mitä tapahtuu kotikoneella. :)
Xubuntu 22.04 LTS, Fujitsu Lifebook E754