Quick Tipps
clone vs. fork
Clone legt eine Kopie lokal an, die aber der Quelle gehört. Ist für eine Zusammenarbeit geeignet. Fork macht eine eigene Kopie draus, die man selber ändern und verwalten kann.
was sollte eingecheckt werden?
.gitignore
package.json
package-lock.json
Git auf dem Server einrichten
User auf dem Server anlegen und SSH Zugang einrichten. Per authorized_keys oder per ssh-copy-id
Leeres Repository auf dem Server anlegen
Gruppe git anlegen. Alle Git-User in diese Gruppe packen
cd /main/target/git/directory
mkdir git-repository OR mkdir projects.git
cd this/directory/above
git init --bare
// oder
git init --bare --shared
// Schreibrecht für Gruppe einrichten
chmod -R g+wx gitrepositories/
Jedes Projekt benötigt ein eigenes <project>.git File.
Repository verbinden und initial füllen
Version 1 - push
local:
cd myproject
git init
git add .
git commit -m "Initial commit"
// remote einchecken
git remote add origin username@gitserver:/main/target/directory/git-repository
git push --set-upstream origin main
Version 2 - secure copy (scp)
local:
cd myproject
git init
git add .
git commit -m "Initial commit"
//
git clone --bare myproject my_project.git
// ist das gleiche wie:
// 0. cp -Rf myproject/.git my_project.git
// Repo zum Server kopieren
scp -r my_project.git username@gitserver:/srv/git
Rules
1 Commit = 1 Topic (golden rule)
Branches:
create for: new features
experiments
bugfixes
…
Git work always on a Branch. HEAD is the active Branch
git checkout switch the HEAD to an other branch
git merge integrates all changes from a specific branch to the current HEAD branch:


GIT Kommandos
Everyday Workflow
git clone -b main safweb@95.217.217.117:/opt/gitrepositories/... // first checkout
git clone user@git-server:project_name.git -b branch_name /some/folder // or so
git add .
git reset // to revert add
git commit -m „the comment“
git status
git pull [remote] [branch] // aktualisiert von remote
Sample: git pull safweb2 main
git fetch // kopiert Änderungen nur in das lokale Repo
Diff between local and remote
git diff --stat --color develop origin/develop
Recover deleted File:
git checkout <path to file with name>
Update from Branch:
git checkout master
git pull origin master
git merge test
git push origin master
git push -u origin master // establish a tracking connection
Branches / Merge
Quelle: https://nvie.com/posts/a-successful-git-branching-model/
git branch <new Branch name> // create a new branch
git checkout <new Branch name> // switch to new branch
git branch -vva // show remote, local and tracking information
---
git checkout -b <new-branch-name> // create (build -b) and checkout to a new branch
git branch // show existing branches
do changes
commit changes
… repeat
git checkout <old branch (for e.g. master)
git merge <new-branch-name> // bring changes to master
Alternative
git switch -c th/test/module
Delete Branch
git branch -d <branch>
Git stash
Eine Art Clipboard. Hier kann unfertige Arbeit zwischengespeichert werden.
Dateien die „gestashed“ sind, verschwinden aus dem Branch und es können andere Arbeite stattfinden
ohne die halb fertige Arbeit im Weg zu haben.
Lokale Änderungen nach stash:
git stash
Anzeigen der stashes:
git stash list
Herausholen aus dem Stash:
git apply stash@{0} // oder was auch immer für eine Nummer
git stash pop // herausholen und gleichzeitig löschen
Aufräumen im Clipboard:
git drop stash{0}
Remote Info und Settings
Info:
git remote show origin
git config --get remote.origin.url
// ab 2.7+
git remote get-url origin
Settings:
git remote set-url remote-name url
git remote get-url <name>
git remote get-url origin
git remote set-url <remote_name> <remote_repository_url>
git remote set-url heroku https://git.heroku.com/fictional-remote-repository.git
MOVE git from Server -> Server
git clone --mirror git@10.100.0.10:/data/Code/git/safweb.git ./safweb
cd safweb
git remote add safweb2 thomashorst@95.217.217.117:/opt/gitrepositories/safweb2.git
git push safweb2