29/9/2017

GIT commando’s, vb, problemen

Filed under: — cybrarian @ 10:45 pm

(Reeks Githandboek (nl)commando’s vbbranch, mergeGitLab vbSourceForge vbgit en gambas)

Commando’s

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 log = geeft 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(-)

Enkele vragen blijven nog:

  • 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?)

(meer…)

Powered by WordPress