Git - új repo WIn alól

Fórumok

Sziasztok!

Lassan eljön az ideje, hogy váltanom kell forráskezelőt. Eddig az MSSourceSafe-et használtam, egyszerű, érthető, kezelhető, egyszerűen menthető az adatbázisa, etc., de sajnos van egy nagy hátránya: csak 32 bites, így az utolsó Visual Studio verzió, amivel hajlandó együttműködni, az a 2019-es, mert az össze utánajövő rendszer 64 bites.

Elkezdtem ismerkedni a Git-el. A Github-al kezdtem, onnan minden működik megfelelően, tudtam új repository-t készíteni, meg minden egyebet is, ami szükséges a működéséhez. De erre csak a magán jellegű kódjaimat rakom fel, a céges kódokat nem rakhatom ki 3rd party tárhelyre, így ahhoz saját szervert kell készíteni.

Elkészült a saját Git szerver. Ez egy Ubuntu szerveren üzemel és ezzel vannak a problémáim:

A putty-al belépve a szerverre létre tudok hozni új repositoryt. Az így létrejött repót tudom kliensről használni: klónozható, tudok állományokat hozzáadni, etc. Viszont képtelen vagyok új repót létrehozni: se VS alól, se parancssorból. Milyen lépéseket kellene tennem, hogy sikerüljön?

Teszem fel van egy forráskódom a D:\Dotnet\Homkozó\TesztProgram mappában, ezen mappán belül természetesen a megfelelő könyvtárstruktúrával. Milyen parancsokat kell kiadnom ahhoz, hogy az elérési útvonal alatt levő teljes struktúra bekerüljön a TesztProgram nevű repóba?

Keresek a neten is, de eddig mindenhol csak arra találtam leírást, hogyan klónozzak létező repót, vagy hogy hozzak létre repót a szerver környezetében...

 

Gábor

Update:

A következő lépésekkel megoldható az új repó létrehozása a szerveren:

A kiinduló feltétel, hogy a szerver gépen legyen SMB-vel megosztva az a mappa, ahol a repók vannak. Ennek nálam git-repos a neve

cd D:\Dotnet\Homkozó\TesztProgram
git init --bare \\ipcim\git-repos\TesztProgram
git init
git add .
git commit -m "Megjegyzés"
git push -u ssh://git@ipcim/git-repos/TesztProgram master

És lőn!

Hozzászólások

Amikor csinalsz egy repot Githubon, es az ures repo kiirja, hogy mit kell csinalni, azt kell lokalis szerverrel is.

    git init
    git add .
    git commit -m "valami valami commit message"
    git remote add origin myuser@myserver.akarmi:path/to/repo
    git push -u origin master

Közeledünk, de valamit elrontok.

cd D:\Dotnet\Homkozó\TesztProgram
git init
git add .
git commit -m "valami valami commit message"
git remote add sajatom ssh://git@ipcim/git-repos/TesztProgram
git push -u sajatom master

Válasz:

fatal: '/git-repos/TesztProgram' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists

Mit rontottam el?

Gábor

Ui: Természetesen a szerveren a git felhasználónak megfelelő jogosultsága van, illetve a git push utasítűs után kérte a git felhasználó jelszavát, amit megfelelően meg is adtam.

Természetesen a /git-repos/TeszProgram mappa még nem létezik a szerveren, hisz pont ezt a repót szeretném létrehozni. Ha belépek putty-al, akkor létre tudom hozni a repót, azzal nincs gond. A gond ott van, ha ezt kliensről szeretném.
Egészen a git push utasításig minden rendben van, létrejön a helyi repó, a commit is tökéletesen lefut.

Elkészült a saját Git szerver.

Na jó, de melyik?

Teljesen jól tud működni amit szeretnél, de én mindig fordítva csinálom. Szerveren létrehoz, clone a saját gépemre, majd egyszerűen átmásolom a meglévő könyvtárat a klónozott git könyvtárba, majd:

git add . ; git commit -m "üzenet" ; git push

Nem igazán. Vagyis, hát nem nagyon van olyan, hogy "git szerver" önmagában. A git egy elosztott cucc, egy git repo a gyakorlatban csak a .git könyvtárban levő rakás file. A git kliens tud repo példányok között szinkronizálni úgy, hogy ssh eléri a másikon a fileokat, de ennyi, nincs a scopejában, hogy ott repokat automatán csináljon vagy bármiféle szerver szerű működést produkáljon, ezért kell ezt neked valahogyan kézzel intézni.

A githublabtea az hoz egy plusz réteget, webuival, ilyesmivel. De jellemzően ott is meg kell csinálni a szerveren a repot, max csak volt rá beépített support az IDÉdben.

Egyébként az is felmerül kérdésként, hogy valójában kell-e neked szerver, ha úgy is egyedül dolgozol? (Lehet, hogy igen, lehet értelme, csak nem tudom, nem az van-e, hogy megszoktad, hogy a vcshez kell egy szerver).

Kell is, meg nem is.

A VSS is csupán kliensként működik, az adatbázisa csak egy megosztott könyvtár volt, nem kellett hozzá a szerver. Ez nekem tökéletesen meg is felelne továbbra is, csak hát az MS levette a palettáról...

A VS is a git-et nyomja ezerrel, eleve benne van a git támogatása, így adott volt, hogy ha már váltani kell, akkor a git-et használjam. Amennyit eddig tapasztaltam belőle, ezerszer bonyolultabb a kezelése, mint a VSS-é, miközben nem ugyanazt az élményt nyújtja, mint a VSS. Amikor elkezdtem anno használni a VSS-t, ott többen voltunk fejlesztők és nagyon kényelmes volt az, hogy ha nálam szerkesztés alatt volt egy állomány (CheckOut -ot mondtam neki), addig mások nem tudták módosítani. Dolgoztam közben Delphi + CVS-el, akkor ugyan csak 3-an fejlesztettünk, de kínlódás volt, amikor véletlenül sikerült belefutnunk abba, hogy ugyanahhoz az állományhoz nyúltunk hozzá.

Bár most már jó ideje egyedül dolgozom, de használok forráskezelőt, mert egyrészt tökéletes mentés arra az esetre, ha a gépem összeomlana, ez esetben sem veszik el a forrás, másrészt vissza tudom nézni a módosításaim történetét. Ja és az sem elhanyagolható szempont, hogy a források biztonsági mentését is sokkal könnyebb megoldani, mert csak a VSS megosztott könyvtárát kell menteni, baj esetén visszaállítani és minden rendben lesz.

"nincs a scopejában, hogy ott repokat automatán csináljon vagy bármiféle szerver szerű működést produkáljon"
Ezt nem tudom értelmezni. Az Ubuntura rakott helyben kiadva a megfelelő parancsot tud repót létrehozni. Tud állományokat hozzáadni, commitolni, klónozni. Létező repóba tud távoli gépen levő repóból adatokat átvenni (git push parancs). Számomra ez szerver-szerű működés. Akkor miért nem tud új repót létrehozni?

Kell is, meg nem is.

Nem az volt a kérdés, hogy kell-e verziókezelő, hanem, hogy kell-e szerver? A git teljesen faszán működik localban, bármikor pár perc munkával be lehet tenni egy "központi" helyre, ha többen lesztek. Nyilván, mentésnek nem rossz, ez pont az egyik use-case volt, amit gondoltam,de arra az is jó, ha mented a géped. 

Ezt nem tudom értelmezni. Az Ubuntura rakott helyben kiadva a megfelelő parancsot tud repót létrehozni. Tud állományokat hozzáadni, commitolni, klónozni. Létező repóba tud távoli gépen levő repóból adatokat átvenni (git push parancs). Számomra ez szerver-szerű működés. Akkor miért nem tud új repót létrehozni?

Szerver szerűnek tűnhet, de valójában nem az. Az a két példány egyenrangú, mehetne adatáramlás mindkét irányba. És a git csak annyit tud, hogy repo példányok között elérhetővé tesz adatot. De a repó példányoknak valahogy létezniük kell, a git nem foglalkozik azzal, hogy mindenféle OSen hogy, meg hova kell könyvtárakat létrehozni. Azt köré kell pakolni, úgy, ahogy a transzfert is. Nincs benne se http se ssh szerver. 

Én a git-hez annyira pont nem értek, de szerintem jogos elvárás user szemszögből a repo létrehozás. Ha már egyszer van egy csatorna a szerverre, amin keresztül lehet írni egy már létező git repót, akkor onnan már nem nagy ugrás ez. Egy megoldás pl. van itt, de ez csúnya módon pont a túloldalon futtatja a gitet: https://stackoverflow.com/questions/30691610/how-to-create-a-remote-rep…

Én a git-hez annyira pont nem értek, de szerintem jogos elvárás user szemszögből a repo létrehozás.

Ez egy teljesen érthető igény, csak a git nem ilyen, ezért mondtam, hogy ... 

Ha már egyszer van egy csatorna a szerverre, amin keresztül lehet írni egy már létező git repót

... mert az nem szerver, csak egy repó másik példánya. Nem a szervert lehet elérni, hanem azt a konkrét másik példányát a reponak, és ezért

akkor onnan már nem nagy ugrás ez

lesz ez mégis nagy ugrás, mert teljesen kívül esik a git scopeján az, hogy hogyan kell több repositoryt kezeleni, a git egy darab repositoryt kezel. Nincs erre semmilyen eszköz, szabály akármicsoda, a repo collection a gitben egy nem létező fogalom. És látszik is, hogy a valóban git szervereknek van is valami struktúrája arra, hogy hogyan vannak ezek rendszerezve, ott van ez megoldva. Szóval vagy kell használni egy olyat, és akkor valaki már megoldotta helyetted, hogy ki van vezetve az apira, hogy szeretnék egy új repot, azt bele lehet tenni az IDE plugina, és akkor neked van create repo on github gombod. Ha te házilag csiszolod a "szervert", akkor ez rád marad, és kell az kicsi script, ami megugorja ezt. (És tippre valami taskkal pl simán bele lehet kötni mondjuk egy vscodeba, vagy akármi normális IDE-be.)

Ha az ember gitet használ, érdemes tisztában lenni azzal, hogy ez itt két layer, és akkor kevésbé leszel eltévedve.

A Visual Studoban megnyitottam egy projektet (valami.sln), aminek vannak forrásállományai. Néhány kattintással megadtam neki a Github regisztrációm adatait, ami alapján simán létrehozta a github fiókomban a a "valami" nevű repository-t, amit a https://github.com/usernevem?tab=repositories oldalon látok is. Természetesen "Commit and Push" után a forrásállományaim is fent vannak a githubon.

Azt gondoltam, hogy ugyanilyen egyszerűen meg tudom ezt csinálni egy saját hálózatban futó Ubuntus git szerverrel is. Egyre inkább az az érzésem, hogy nem, mindenképp az kell, hogy a repót a szerveren hozzam létre először...

Na de ember, a visual studio zt csinalja ilyenkor, hogy az API-n keresztul csinal egy repot a github-ra. Mi koze ennek ahhoz, hogyha sajat talpas git repo-t akarsz uzemeltetni? Tok masrol beszelunk.

A sajat git-ed az majd beszel ssh-val talan. Ha nagyon szopoagra akarsz menni, akkor beallitod a https-t is (git http-backend).

Ha nagyon azt akarod csinalni mint github, gitlab stb, akkor irj egy kis python programot amiben MoC-olod a github API-t es leforditod lokalis git parancsokra amit akarsz. Illetve itt neked csak a "create repo" api call kell.

De mar tobben is irtuk, miert szopatod magad es miert nem raksz fel egy self-hosted gitlab-ot vagy egy giteat??

Igen nem trivialis. Plane hogy aztan uzemeltetni is kell. Hobbi projektnek nem ajanlanam en sem. Vagy ha kicsi a ceg. Sot, nem csak az uzemeltetessel lesz ot gond, hanem hogy az ember kezelje magukat a gitlab/github objektumokat is (projekt, team, subfolder, losz, anyamkinyja)

De azert annal egyszerubb, mint sajat wrappereket irni a git-hez, meg python apikat :D

(meg ki lehet kapcsolni a sok csilogany babzsakfotel konzumidiota bloat feature-t is :D, hajbi hol az anyja kinnyaban van, o szebben tud ilyen faszsagokat mondani)

Githubra tudok új repót feltenni VS alól (tehát nem kell a webes felület ahhoz, hogy létrejöjjön)

Ezt fejtsd ki legyszi.

Van egy lokalis repod, felveszel egy github.com-os remote-ot, push, es letrejon a repo magatol? Meg lennek lepve. Nem csak valami GUI magic moge van elrejtve?

Egyebkent nem lenne egyszerubb valami self-hosted kulcsrakesz megoldas, Gitlab vagy hasonlo?

2024-ben VSS, azt a k***a :). Beugrottak az emlékek rögtön (enyhe PTSD de inkább nosztalgia).

2021-ben még telepítette 2019 Serverre egy Kolléga a volt munkehelyemen, a Magic Xpi (valamikori iBolt) csudával együtt, az akkor verzió (asszem 4.13) telepített egy Visual Studióra hajazó szerkesztöt, ami Java-ba forgatta az elkészült projektet és VSS-t használt verziózásra. Nem a legjobb élményeim között tartom számon.

Git-et természetesen nem tudott, hogy tudott-e más verziókezelöt VSS-en kivül, arról nincs információm.

Akkor nem tartottam különösebben érdekesnek hogy 64-bites szerverre telepítette a VSS-t, de ezek szerint kellett volna.

Publikálj ki egy share-t smb-n a szerveren és ott annyi repository-t csinálsz git init --bare -rel a kliensedről amennyit szeretnél. (külön-külön könyvtárba természetesen)

milyen sötllatségben van a hup git témakörben, jó ég :D

Tök jó ez a fórum! Megint sokat tanultam a hozzászólásokból.

Nem is kell külön szervert üzemeltetnem a repónak, elég egy megosztott mappa valahol, ahova --bare paraméterrel tudom létrehozni a központi repót.... Teszteltem, működik.

Köszönöm mindenkinek!