29/9/2017

GIT commando’s, vb, problemen

Filed under: — cybrarian @ 10:45 pm

(in de reeks Git heb ik deze afgesplitst van het algemene Git artikel. Zie ook handboek inhoud en …)

Commando’s

git config --global user.name "mijn naam"
git config --global user.email mijnemail@mijndomein.tld
git config --list

Deze configuraties worden met –global eenmalig gedaan; je kan ze zonder global uitvoeren voor een project met afwijkende gegevens.
Je kan op dezelfde manier je editor en diff tool instellen.
Bekijk de instellingen met (de laaste lijn) –list. (antwoord leeg=geen instellingen)

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/

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

git status = overzicht toestand, bv nieuwe bestanden enz
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 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" = 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
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 pull korteNaam master = alles terug binnenhalen om te werken.

git diff = verschillen zien tussen working directory en staging
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 checkout branchename_voor_mij = overschakelen naar branch

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
  • Wat met .png, .jpg, enz. Apart opslaan omdat ze binary zijn?
  • 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?

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
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.

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

Reacties zijn gesloten.

Powered by WordPress