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 files in mijn project? (upd 2024)
Inderdaad wordt er een verborgen directory gemaakt met de files die git nodig heeft voor zijn werk. Wil je terug een “zuivere” kopie zonder die git files, een “export”, dan kan je bv een “archive” laten maken door git-archive; daar zit geen .git directoy in.

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 diff --color > ~/diff.txt verschillen inclusief kleurcodes bewaren om terug te kunnen zien met bv cat diff.txt

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



Voorbeelden van gebruik

1. met gewone tekst ipv broncode

mkdir nieuws
cd nieuws
git init

Initialized empty Git repository in /home/cybrarian/Data/Documents/nieuws/.git/
(Daarin zijn 13 bestanden en 9 subdirectories bijgekomen 54.8 kB)

git add .

(hier komt geen reaktie behalve lijn opschuiven)

git commit -m "Onderwerp algemeen"

# On branch master
#
# Initial commit
#
# Untracked files:
# (use “git add …” to include in what will be committed)
#
# .directory
# 2017-06-08.txt
nothing added to commit but untracked files present (use “git add” to track)

Ik gebruik nieuws als eigen korte naam:

git remote add nieuws git@gitlab.com:news/nieuws.git

(geen reaktie)


git push -u nieuws master

git push -u nieuws master
The authenticity of host ‘gitlab.com (52.167.219.168)’ can’t be established.
ECDSA key fingerprint is f1:d0:fb:46:73:7a:70:92:5a:ab:5d:ef:43:e2:1c:35.
Are you sure you want to continue connecting (yes/no)?
yes
Warning: Permanently added ‘gitlab.com,52.167.219.168’ (ECDSA) to the list of known hosts.
error: src refspec master does not match any.
error: failed to push some refs to ‘git@gitlab.com:news/nieuws.git’

2. KDE: Wallet probleem

Bij een eerste gebruik van een aangemaakte git repo, gaat je wallet op KDE proberen je gegevens te onthouden als je “push” verbinding maakt:

~/Test/MyProjectToTrack> git push -u test master

Helaas toont hij een verwarrende vraag: “username for …” en hij vraagt daaronder “password:”. Als je daar het wachtwoord ingeeft krijg je daarna een venster met de “password for .. / password: ” vraag, en snap je dat je de eerste keer de username had moeten geven. Met als gevolg:

fatal: Authentication failed for ‘https://gitlab.com/testuser/Test.git/

3. fatal: repository … not found
Bij een online dienst (gitlab in dit geval) kan een fout voorkomen als bovenstaande.
Nochtans heb je lokaal een project gemaakt, remote een project gemaakt met:
git remote add newproject https://gitlab.com/mijn.naam/newproject.git
en kan je het ook zien met git remote -v:

newproject https://gitlab.com/mijn.naam/newproject.git

Echter als je:
git push newproject master
krijg je een foutmelding

remote: Not Found
fatal: repository ‘https://https://gitlab.com/mijn.naam/newproject.git/’ not found

Nog eens toevoegen lukt niet:
git remote add newproject https://gitlab.com/mijn.naam/newproject.git

fatal: remote newproject already exists

Dat kan liggen aan bv rechten. In een niet-betalende gitlab account moest ik eerst in de website het project aanmaken, gewoon met de naam “newproject” (zonder .git).
Daarna was hij pas beschikbaar.

4. Clone werkt niet
git clone git://gitlab.com/iemand.naam/eenProject.git

Cloning into ..
fatal: Unable to look up git@gitlab.com:iemand.naam (port 9418) (Name or service not knnown)

git clone git@gitlab.com:iemand.naam/Project.git

a) De eerste keer krijg je misschien:

The authenticity of host ‘gitlab.com (52.167.219.168)’ can’t be established.
ECDSA key fingerprint is f1:d0:fb:46:73:7a:70:92:5a:ab:5d:ef:43:e2:1c:35.
Are you sure you want to continue connecting (yes/no)?

Je kan eenvoudig verdergaan met het antwoord: yes

Warning: Permanently added ‘gitlab.com,52.167.219.168’ (ECDSA) to the list of known hosts.
remote: Counting objects: 202, done.
remote: Compressing objects: 100% (105/105), done.
remote: Total 202 (delta 123), reused 162 (delta 95)
Receiving objects: 100% (202/202), 284.94 KiB | 0 bytes/s, done.
Resolving deltas: 100% (123/123), done.
Checking connectivity… done

Ok, en volgende keer zal de vraag niet meer terugkomen (permanently added..), je ziet verder het afhalen van het project.

Of, indien je enkel een (leeg) project aangemaakt had online:

Warning: Permanently added ‘gitlab.com,52.167.219.168’ (ECDSA) to the list of known hosts.
warning: You appear to have cloned an empty repository.

git status

On branch master
Initial commit
Untracked files:
(use “git add …” to include in what will be committed)
.directory
nothing added to commit but untracked files present (use “git add” to track)

b)

fatal: unable to connect to gitlab.com:
gitlab.com[0: 52.167.219.168]: errno=Connection timed out
– is de gebruiker lid van het project?
– heeft de gebruiker de nodige rechten in het project?
– is de public key in de gebruikersaccount geregistreerd op de gitlab site? (Settings, SSH-keys, plakken in een veld https://gitlab.com/profile/keys/)
– is de private in de juiste directory met de juiste rechten gezet? (meestal ~/.ssh directory, alleen leesbaar voor eigenaar zelf) bv:
ls ~/.ssh/id_rsa
-r-------- 1 myname users 1626 datum id_rsa

– gitlab over ssh-keys maken: https://gitlab.com/help/ssh/README

5. Geen Git repository?
git status

fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)

Dit betekent bv:
– dat er in die directory geen git aktiviteit is; verkeerde tak in je directory struktuur?
– zit je in de juiste directory dan is git hier nog niet in gebruik genomen. Zie initialiseren git directory (git init).
– misschien is er nog helemaal geen git gebruikt (git config –list), zie initialiseren git gebruik (git config).

6. upstream is gone

Na het clonen van een leeg project en het bijmaken van een paar bestanden, commit.

git status

On branch master
Your branch is based on ‘origin/master’, but the upstream is gone.
(use “git branch –unset-upstream” to fixup)
Untracked files:
(use “git add …” to include in what will be committed)

git branch --unset-upstream

7. No upstream branch

git push origin

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

git push –set-upstream origin master

git push --set-upstream origin master

Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 270 bytes | 270.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To gitlab.com:devara/GitUse.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

git status

On branch master
Your branch is up-to-date with ‘origin/master’.
Untracked files:
(use “git add …” to include in what will be committed)

.directory

nothing added to commit but untracked files present (use “git add” to track)

Reacties zijn gesloten.

Powered by WordPress