GIT commando’s, vb, problemen
(Reeks Git – handboek (nl) – commando’s vb – branch, merge – GitLab vb – SourceForge vb – git en gambas)
git config --global user.name "mijn naam"
git config --global user.email mijnemail@mijndomein.tld
git config --list
Je kan op dezelfde manier je editor en diff tool instellen.
Waarde wordt bewaard in ~/.gitconfig
(in opensuse).
Bekijk de instellingen daar, of zoals de laaste lijn met –list.
(antwoord leeg=geen instellingen)
Deze configuraties worden met –global eenmalig gedaan; je kan ze zonder global uitvoeren voor een project met afwijkende gegevens (na git init in de projectdirectory):
git config user.name "mijn andere naam"
git config user.email anderemail@mijndomein.tld
Deze komen terecht in de lokale .git/config
git init
= start gebruik git; creatie van ~/.git/ directory in de projectdir waar je bent
git clone git://gitserver.org/iemandsdirectory/eenproject.git
= haalt een bestaand project af en maakt een werkdirectory klaar.
Initialized empty Git repository in /home/name/Gambas3Prj/PrjName/.git/
Als het project via de webinterface is aangemaakt zal je meestal een “text” bestand README.md
in vinden;
extentie md staat voor markdown, voor eenvoudige opmaak nummering enz met # heading *bold* -listitem enz
Waarna git status
:
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use “git add” to track)
Beginnen met een kopie van een project:
git clone git://gitlab.com/iemand.naam/eenProject.git
Cloning into ‘eenProject.git’ …
(Fouten zie ook 4*)
Waar komt clone terecht?
Als je geen git init gedaan hebt, maar onmiddellijk git clone:
– clone van het project “GitUse”
– commando van in de directory ~/Git/GitUsePrj>
Dan wordt ~/Git/GitUsePrj/GitUse
gemaakt, met daarin de verborgen .git directory.
git status
= overzicht lokale(!) toestand, bv nieuwe bestanden enz (! zie git fetch)
git status -s
= korte samenvatting toestand, met afkortingen als M, MM, A, ??
git add test.txt
= toevoegen aan staging (of nieuw bestand opvolgen- in “tracked”)
git add .
voegt alle nieuwe files en dirs toe (behalve ignored)
git add -u
kijkt naar de wijzigingen aan de tracked files.
git rm --cached test.txt
= untrack/unstage test.txt;
git add '*.txt'
= als wildcards gebruikt worden: aanhalingstekens
git
git commit -m "beschrijving van de inhoud of wijziging (m=message)"
= toevoegen aan repository van alles wat in staging staat; anders filenaam opgeven
git commit test.txt
= commit alleen deze file
git commit -a
= gaat zelf de nodig add en remove (rm) doen
git commit -a -m 'grote lijn van wijziging'
= combinatie -a en -m
git commit --amend
vergist in tekst van commit? edit..
git log
= geeft soort “history”, in volgorde al de laatste handelingen (in editor; verlaten met :q )
Remote instellen:
git remote add korteNaam git@gitlab.com/userdirectory/repository.git
= opgeven van repository op de gitruimte ; standaard branch is ‘master’
git remote add korteNaam https://domain.tld/userdirectory/repository.git
= versie met https in plaats van git of ssh.
git remote -v
= lijst van gedefinieerde fetch en push remotes
git push -u korteNaam master
= alles naar online (git push origin master)
git fetch
= toestand van de online versie ophalen (waardoor je -lokaal- de status kan vergelijken met de bijgewerkte toestand online tot dat punt)
git pull korteNaam master
= alles direkt binnenhalen om te werken. (Eigenlijk fetch + auto merge; je krijgt geen kans meer om de verschillen te bekijken zoals na fetch!)
git diff
= verschillen zien tussen working directory en staging (standaard editor :q om te verlaten)
git diff HEAD
= verschillen zien tov laatste commit, meest recente=’HEAD’
git diff --staged
= verschillen zien eigen staged tov laatste online pull
git diff --cached
= ” ” ”
git reset
= verwijder laatste staged (maar file blijft wel tracked)
git checkout -- unwantedfile.txt
= (spatie laten)
git branch branchname_voor_mij
= maak nieuwe branch
git branch --list
= toon branches
git checkout branchename_voor_mij
= overschakelen naar branch
git branch -d branchname_voor_mij
= verwijder branch (gaat niet: checked out?)
git rm '*.txt'
= verwijderen van de files + wijz. klaarzetten in staging
Bij (merge) conflict, bv na git pull:
git mergetool
Dat brengt je in een gestuurde oplossing file per file, met info en keuzes als: use modified (m) or deleted (d) file, abort (a) …
Je moet dan eerst een git commit doen en daarna terug git pull.
Ik wil …
– controleren welke (exluded/uit te sluiten) bestanden mee in git zitten:
git ls-files
(alleen bestanden)
git ls-files --stage
(meer detail: [tag] mode object stage file)
– fout opgezette lokale repo wissen en opnieuw beginnen: rm -rf .git
(hier zit alles in). Check je .gitignore file in de project directory (waar .git stond), met git init wordt die overschreven?
rm -rf .git
git ls-files
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)
– weten of mijn lokale repo bij is met online: git status
git status
# On branch master
# Your branch is ahead of ‘nieuws/master’ by 1 commit.
# (use “git push” to publish your local commits)
#
# Untracked files:
# (use “git add…” to include in what will be committed)
#
# ProjectToTrack/.settings
nothing added to commit but untracked files present (use “git add” to track)
(zie ook 5*)
– mijn versie naar boven naar online duwen git push
git push –all
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 521 bytes | 0 bytes/s, done.
Total 5 (delta 1), reused 0 (delta 0)
To git@gitlab.com:/mat.abc/Test.git
9512a28..a72f459 master -> master
– de laatste online versie afhalen git pull test master
git pull test master
Pass a valid window to KWallet::Wallet::openWallet().
Pass a valid window to KWallet::Wallet::openWallet().
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
From https://gitlab.com/mat.ara/Test
* branch master -> FETCH_HEAD
9512a28..a72f459 master -> test/master
Updating 9512a28..a72f459
Fast-forward
ProjectToTrack/.src/FMain.form | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
- worden er bestanden bijgemaakt door git in de specifieke subdirectories van een project, of alleen in de onzichtbare .git directory op hoogste niveau?
- wat is beste methode: directories opnemen en files excluden, of specifieren welke wildcard-files moeten opgenomen worden?
Bv voor gambas: ./*.txt; ./src/*.class; ./src/*.form erin of .gambas; .settings; .*~ eruit: Gebruik .gitigrnore (gambas maakt nu een .gitignnore bij creatie van een project). - Wat met .png, .jpg, enz. Apart opslaan omdat ze binary zijn? Kunnen mee in ropository maar de diff is enkel op tekst.
- moet een projectdir dezelfde naam hebben op de verschillende locaties? De dir waarin je git init doet waarschijnlijk niet, en de rest haal je mee binnen zeker?
- Hoe werken vanop verschillende computers (als dezelfde ‘gebruiker’ (zelfde e-mail adres); ssh keys kopieren of meer keys maken? Hier ben ik nu geneigd om verschillende “users” te maken op de verschillende toestellen/locaties. Maar als ieder van die users dezelfde branch “dev” gebruikt wordt het snel weer verwarrend. Je moet telkens de branches met dezelfde naam mergen.
Ik plan nu:-
workmail@domainwork.tld - > branch "devwork"
-
secondwork@webmail.tld - > branch "devlaptop"
-
personalmail@hosting.tld - > branch "devhome"
Dan is het ook duidelijker dat je inderdaad moet mergen.
-
Links
Een paar links voor zolang ze geldig zijn:
Nederlandstalig! https://git-scm.com/book/nl/v1/Aan-de-slag
https://git-scm.com/book/en/v1/Getting-Started-First-Time-Git-Setup
https://help.github.com/articles/se-up-git/
https://try.github.io/levels/1/challenges/1
Goede commit messages zien er zo (niet) uit:
https://chris.beams.io/posts/git-commit/
https://longair.net/blog/2009/04/16/git-fetch-and-merge/ fetch, merge (of pull?)