Benutzer-Werkzeuge

Webseiten-Werkzeuge



programming:git:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
programming:git:start [2020/02/14 17:35]
frank [umbenannte Dateien]
programming:git:start [2020/09/12 14:16] (aktuell)
frank [rebase als merge]
Zeile 128: Zeile 128:
 </code> </code>
  
 +==== merge-commits ====
 +
 +  git show -m 34183ddd13db
 +
 +zeigt alle Änderungen durch den merge, nicht nur die Änderungen, die aus Konflikten entstanden sind
 ==== bestimmte Version einer Datei ==== ==== bestimmte Version einer Datei ====
  
Zeile 141: Zeile 146:
   git show <treeish>:path/to/$file > /tmp/$file   git show <treeish>:path/to/$file > /tmp/$file
   gedit /tmp/$file   gedit /tmp/$file
 +  
 +auch committer-info zeigen
 +
 +  git show --format=fuller HEAD
 ===== commit ===== ===== commit =====
  
Zeile 232: Zeile 241:
  
   git rebase --preserve-merges v4.20-rc7   git rebase --preserve-merges v4.20-rc7
 +  #neueres git (Ubuntu 20.4)
 +  git rebase --rebase-merges v5.7
  
 (holt die Änderungen vom remote und rebased die eigenen "on-top") (holt die Änderungen vom remote und rebased die eigenen "on-top")
Zeile 252: Zeile 263:
  
 https://shinglyu.github.io/web/2018/03/25/merge-pull-requests-without-merge-commits.html https://shinglyu.github.io/web/2018/03/25/merge-pull-requests-without-merge-commits.html
 +
 +möchte man immer einen merge-commit, auch wenn dieser per default nicht angelegt wird:
 +
 +  git merge --no-ff new-feature
 ===== revert ===== ===== revert =====
  
Zeile 274: Zeile 289:
   git push --force-with-lease   git push --force-with-lease
  
 +==== rebase als merge ====
 +
 +  git checkout fix_types
 +  git rebase master
 +  git checkout master
 +  git merge fix_typos --ff-only
 +
 +https://coderefinery.org/blog/2020/04/24/rebase-vs-merge/
 +
 +als git alias (~/.gitconfig):
 +
 +  rebasefeature = "!f() { CUR=$(git rev-parse --abbrev-ref HEAD);FEAT=$1;echo $CUR $FEAT; git checkout $FEAT; git rebase $CUR; git checkout $CUR; git merge $FEAT --ff-only; }; f"
 ==== datei entfernen ==== ==== datei entfernen ====
  
Zeile 296: Zeile 323:
 um alle Datei-Änderungen dieses Commits zurückzusetzen um alle Datei-Änderungen dieses Commits zurückzusetzen
  
-sollen komplette Datei-Änderungen übernommen werden, einfach via "git add <datei>" +commit+sollen komplette Datei-Änderungen übernommen werden, einfach via "git commit <datei>" ("-c ORIG_HEAD" übernimmt die Beschreibung des ursprünglichen zu splittenden Commit)
  
-sollen nur bestimmte Patch-Bereiche übernommen werden mit "git add -p" arbeiten+sollen nur bestimmte Patch-Bereiche übernommen werden mit "git add -p" arbeiten +commit
  
 ==== Basis aktualisieren ==== ==== Basis aktualisieren ====
Zeile 348: Zeile 375:
 git push --mirror ssh://$server/$pfad/$repo git push --mirror ssh://$server/$pfad/$repo
 </code> </code>
- 
-da der Fehler bei mir aber wiederkam (auch trotz großem swapfile), konnte ich ihn mit folgenden Kommandos beheben (als user,der das git gc aufruft): 
  
   git config --global core.packedGitLimit 128m   git config --global core.packedGitLimit 128m
Zeile 360: Zeile 385:
     packedGitWindowSize = 128     packedGitWindowSize = 128
  
 +nachdem ich irgendwann weiterhin out-of-memory Fehler bekommen hatte inklusive oom-reaper (Prozess gekillt wegen zu wenig Speicher) konnte ich das Problem mit einem zusätzlichen SWAP-Speicher (auf ssd) lösen
 +
 +<code>
 +swapfile=/var/swap.img
 +if [[ ! -e $swapfile ]];then
 +  dd if=/dev/zero of=$swapfile bs=1M count=4096
 +fi
 +chmod 0600 $swapfile
 +mkswap $swapfile
 +swapon $swapfile
 +</code>
 +
 +Quelle: https://stackoverflow.com/a/54755601
 ===== whitespace-fix ===== ===== whitespace-fix =====
  
Zeile 402: Zeile 440:
  
 löscht alle Referenzen auf remote-branches, welche nicht mehr existieren löscht alle Referenzen auf remote-branches, welche nicht mehr existieren
 +
 +==== remote branch sichern ====
 +
 +bevor ein entfernter branch überschrieben / gelöscht wird, kann man ihn so in einen anderen branch (lokal) sichern
 +
 +  git checkout -b 5.8-rc-old origin/5.8-rc
 +  git branch --unset-upstream
 ==== Datei/Verzeichnis aus anderem Branch in aktuellen ==== ==== Datei/Verzeichnis aus anderem Branch in aktuellen ====
  
Zeile 591: Zeile 636:
 ===== git format-patch ===== ===== git format-patch =====
  
-  git format-patch sha1_from^..sha1_to --cover-letter+  git format-patch -vX sha1_from^..sha1_to --cover-letter
  
 in 0000-cover-letter.patch wird dann die Beschreibung der Patch-Serie reingeschrieben in 0000-cover-letter.patch wird dann die Beschreibung der Patch-Serie reingeschrieben
  
 +  git format-patch sha1_from^..sha1_to --subject-prefix="RESEND PATCH v2" --to="email" --cc="other email"
 ===== git send-email ===== ===== git send-email =====
  
Zeile 691: Zeile 737:
     current = rev-parse --abbrev-ref HEAD     current = rev-parse --abbrev-ref HEAD
     remote-diff = !git diff $1@{upstream}..$1@{0}     remote-diff = !git diff $1@{upstream}..$1@{0}
 +    nextref = "!f() { git log --reverse --ancestry-path --pretty=%H $1..HEAD | head -${2:-1} | tail -1; }; f"
 +    cleanup = "!f() { git reflog expire --expire=now --all; git gc --aggressive --prune=now;git repack -a -d; }; f"
 +    logone = !git log --oneline
 +    logm = !git log --no-merges --oneline $1^..$1 #commits, welche zu einem merge-commit gehören
 +    pushnew = "!git push origin $(git rev-parse --abbrev-ref HEAD);"
 </code> </code>
  
Zeile 940: Zeile 991:
 !external/ !external/
 </code> </code>
 +
 +==== automatisches build ====
 +
 +ich habe auf meinem NAS ein (sehr simples) deployment eingerichtet, welches mir nach einem Push automatisch mein [[https://github.com/frank-w/BPI-R2-4.14|Kernel-repo]] baut.
 +
 +dazu muss ich natürlich erstmal die Abhängigkeiten installieren, die meine build.sh benötigt (siehe Readme.md).
 +weiterhin benötigt ccache ein temp-Verzeichnis im home des Users unter dem die build.sh läuft...da dies bei mir www-data ist (home=/var/www) musste ich das Verzeichnis hier anlegen und entsprechend die Rechte setzen.
 +
 +Bei mir läuft der GIT-Server in einer VM, von daher bedenkenlos möglich ;) sonst sollte zumindest der Deploy-Prozess (und die installierten Tools) in eine VM gepackt werden.
 +
 +der git-hook selbst sieht dann so aus (da ich nicht nur den Master-Branch bauen möchte sind die Code-Stellen auskommentiert):
 +<code bash>
 +#!/bin/bash
 +TARGET="/mnt/vcs/git_repo/BPI-R2-Linux-master"
 +GIT_DIR="/mnt/vcs/git_repo/BPI-R2-Linux"
 +BRANCH="master"
 +
 +while read oldrev newrev ref
 +do
 +  # only checking out the master (or whatever branch you would like to deploy)
 +#  if [[ $ref = refs/heads/$BRANCH ]];
 +#  then
 +     BRNCH=${ref//refs\/heads\//} #without "A" to avoid conflict with filter
 +    echo "Ref $ref ($oldrev => $newrev) received. Deploying
 +${BRNCH} branch to production..."
 +    mkdir -p $TARGET/$newrev
 +    git --work-tree=$TARGET/$newrev --git-dir=$GIT_DIR check
 +out -f $BRNCH
 +    echo "starting deploy..."
 +    (
 +      echo "deploy it..."
 +      cd $TARGET/$newrev
 +      ./build.sh importconfig
 +      ./build.sh build
 +      ./build.sh pack
 +      #...
 +    ) &> $TARGET/$newrev/deploy.log &
 +#  else
 +#    echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
 +#  fi
 +done
 +</code>
 +
 +die Befehle zum kompilieren ließen sich natürlich in eine separate Datei auslagern, die im Git selbst liegt...auch die Bedingung, welche Branches gebaut werden sollen...ich wollte es aber einfach halten ;)
 +
 +das wichtigste, was fehlt ist eine Warteschlange, falls der build-prozess noch läuft. hier kann man sich entweder über eine run-datei helfen oder man schaut, ob der langlaufende Prozess noch läuft
 +
 +  if [[ "$(pidof make)" != "" ]]; then echo "build running"; fi
 +  if [[ "$(pidof tar)" != "" ]]; then echo "pack running"; fi
 +
 +für beide Fälle müsste der build-Prozess geparkt werden
 ====== webbasierte Git-Tools ====== ====== webbasierte Git-Tools ======
 ===== GITList ===== ===== GITList =====
programming/git/start.1581698127.txt.gz · Zuletzt geändert: 2020/08/29 17:14 (Externe Bearbeitung)