Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2009

lära sig git

bakgrund: har en polare som vill att jag bygger en hemsida/system till honom. han vill även att jag använder git för att kunna se versionsförändringar och så. jag har ingen aning hur man använder git eller liknande så behöver nu lära mig.

först och främst, vad är git?
har ni någon sida eller video eller liknande där jag kan lära mig att använda git?
krävs det några speciella program för att använda git? jag sitter på en windows dator och programmerar i notepad++.
antar att det inte är specifika språk som krävs? jag programmerar i php iaf.

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Mar 2010
Trädvy Permalänk
Medlem
Plats
Zion
Registrerad
Apr 2004

[ i5-6600K @ 4.7Ghz || Corsair H110 GTX || 16GB DDR4 || ASUS Z170 Pro Gaming || Asus ROG 1080 Strix @ 2100+/11Ghz+ ]
Unigine Superposition 1080p; 17487 @ Medium; 4594 @ Extreme
"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Trädvy Permalänk
Medlem
Registrerad
Dec 2009

Här är en annan bra sida https://git-scm.com/

Jag försökte lära mig att göra rebase på commits för att korta ner loggarna och göra snyggare merge:ningar, men det var ju lättare att fråga hur än att lära sig hur... :S
Git är ju inte jättelätt, men det är lite friare och smartare än svn så vitt jag har märkt.

Trädvy Permalänk
Forumledare
Registrerad
Okt 2002

Git är i mina ögon helt rätt abstraktion för versionshantering (av kod — binärer är en annan historia). Jag hävdar att det inte alls är svårt att lära sig avancerad Git-användning om man gör det i en pedagogisk ordning, men med få undantag är alla alldeles för måna om att "bara komma igång", skippar koncept som arbetsträd/index/repo, förstår inte vad en gren är, förstår inte topologin, blir rädda för att göra saker (tar säkerhetskopior av hela repot innan de startar merge eller rebase…), osv. Git blir en fiende, när det borde vara din bästa vän!

Git-projektet använder Pro Git som sin officiella pedagogiskt uppbyggda användardokumentation, vilken jag tycker är fullt tillräcklig som introduktion. Jag vet personer som använt (läs: "brottats med") Git i flera år som inte har stenkoll på första sidorna i den boken och fortfarande ser operationer som oförståeliga saker som bara är att memorera.

Vill man bara kunna checka in en fil så behöver man inte mer än add och commit, men vill man någon gång göra mer avancerade saker så bör man börja med att läsa Getting started-kapitlet i boken. Lägg extra vikt vid 1.3 Git Basics och särskilt The three states om arbetsträd/index/repo — det är sannolikt den med råge största förvirringen för personer som är nya med Git, inklusive de som är vana vid versionshantering i generella ordalag sedan tidigare. Inte minst så är det ofta rena grekiskan att läsa manualen om man inte är med på skillnaden mellan "working tree", "index" (eller "staging area" som det lite förvirrande också kallas) och "repository".

Nästa koncept att förstå utan och innan är vad en gren är i Git: 3.1 Git Branching - Branches in a Nutshell. Jag brukar likna det vid en post-it-lapp som man sätter på en viss nod ("commit") i trädet, och som man kan flytta som man vill. Så länge som det finns en sådan post-it-lapp som refererar till en viss nod i trädet så är denna nod nåbar, tillsammans med alla dess föregångare, ända ned till roten av repot. Att tänka på det som en post-it-lapp hjälper pedagogiskt för att trycka på att en gren är extremt lättviktig i Git. Det är trädet av noder som är det fundamentala objektet — post-it-lapparna är bara till för att vi vanliga dödliga ska kunna navigera i trädet genom namn som master och develop snarare än att behöva memorera e83c5163316f89bfbde7d9ab23ca2e25604af290.

Jag skulle gå så långt som att säga att om man har koll på dessa två koncept så kommer man närapå automatiskt lära sig så mycket Git som man behöver för att aldrig vara nervös. Nästan alla operationer handlar om att manipulera dessa tre tillstånd och de post-it-lappar man använder för att namnge specifika ögonblicksbilder. Varje gång man utför ett kommando under inlärningsprocessen så ska man tänka i termer om dessa saker, förutspå vad som kommer hända och kontrollera att så faktiskt blev fallet.

Ett "problem" om man använder Git i små projekt är att man inte lika uppenbart ser nyttan med modellen, men även i enpersonsprojekt så bör man snabbt märka att versionshantering leder till en mer ordnad utvecklingsprocess och ger en stor trygghet i att våga refaktorera och kasta gammal kod.


Vad gäller särskilda program för att använda Git så rekommenderar jag egentligen starkt att lära sig använda git via kommandoraden. En Windows-installation av Git kommer med en Bash-tolk ("Git Bash", som tog ett massivt kliv i slutet av 2015 för de som inte testat på ett tag) som gör att tvångströjan inte känns riktigt lika trång ens när en *nix-räv behöver sitta i Windows. Dock så kommer icke-rävar snabbt märka att man även behöver lära sig några grundkommandon i Vim (insert/normal-läge, spara+avsluta) som används som standard-editor. Där faller många på inlärningströskeln, men har man minsta vilja så går det att komma över.

Alternativt kan man direkt använda sin IDE:s koppling till Git, men alla sådana alternativ jag har sett har i mina ögon förr eller senare varit otillräckliga på egen hand. Som ett konkret exempel så gömmer JetBrains-familjen (IntelliJ, PyCharm, PHPStorm, …) indexkonceptet mer eller mindre helt för de flesta operationer, vilket ger en felaktig bild av vad som händer under skalet och känns ytterst begränsande om man vet vad som egentligen är möjligt. Andra implementationer har andra problem, men generellt löser dessa verktyg inte grundproblemet: att veta vad man vill göra. Det är ofta trivialt att utföra vad man vill genom terminalen om man bara vet vad det är man vill.

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jul 2001
Skrivet av Christley:

bakgrund: har en polare som vill att jag bygger en hemsida/system till honom. han vill även att jag använder git för att kunna se versionsförändringar och så. jag har ingen aning hur man använder git eller liknande så behöver nu lära mig.

först och främst, vad är git?
har ni någon sida eller video eller liknande där jag kan lära mig att använda git?
krävs det några speciella program för att använda git? jag sitter på en windows dator och programmerar i notepad++.
antar att det inte är specifika språk som krävs? jag programmerar i php iaf.

Hehe intressant. Hur kommer det sig att din polare vill att du bygger en hemsida åt honom och samtidigt använder git som versionshanteringssystem? Om han har koll på detta så borde han väl nästan kunna bygga sidan själv?

Här finns lite att läsa iaf:
https://www.atlassian.com/git/tutorials/

WS: AMD Ryzen 7 1700 | 16 GB DDR4 | Geforce GTX 1060 OC 6GB | 480 + 256 + 240 + 240 GB SSD | Win10 x64 Professional + Antergos Linux (Arch-derivat)
Bärbar: Macbook Pro Retina 13" | Intel Core I5 2,4Ghz | 16GB RAM | 256GB Flash
Server: 3x HP Proliant microserver Gen8 | 16 GB DDR3 ECC ram | Sammanlagt 26TB HDD | Esxi

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2009
Skrivet av -=fredrik=-:

Hehe intressant. Hur kommer det sig att din polare vill att du bygger en hemsida åt honom och samtidigt använder git som versionshanteringssystem? Om han har koll på detta så borde han väl nästan kunna bygga sidan själv?

Här finns lite att läsa iaf:
https://www.atlassian.com/git/tutorials/

han har inte tid att bygga systemet, så anställer mig. han vill att jag använder git för att han ska kunna ta över allt lätt i framtiden

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!