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 [2019/05/15 19:18]
frank [commit splitten]
programming:git:start [2019/10/01 12:42] (aktuell)
frank
Zeile 73: Zeile 73:
 #​Verzeichnis ausschließen:​ #​Verzeichnis ausschließen:​
 git diff b543a94c2247bbf9e66ad9996f7d0273458faacd..bbbb5eb11e10e9fa4e0e3a620f8aa47e1e8355c4 -- . ':​(exclude)drivers/​misc/​mediatek/​*'​ >​wifi.diff git diff b543a94c2247bbf9e66ad9996f7d0273458faacd..bbbb5eb11e10e9fa4e0e3a620f8aa47e1e8355c4 -- . ':​(exclude)drivers/​misc/​mediatek/​*'​ >​wifi.diff
 +
 +#mit remote vergleichen
 +branch=$(git rev-parse --abbrev-ref HEAD)
 +git diff $branch origin/​$branch
 </​code>​ </​code>​
  
Zeile 185: Zeile 189:
  
 (holt die Änderungen vom remote und rebased die eigenen "​on-top"​) (holt die Änderungen vom remote und rebased die eigenen "​on-top"​)
 +
 +alternative (aktuellen branch im losgelösten Head aktualisieren):​
 +
 +  git rebase --onto v5.3-rc1 <erster commit>^ <letzter commit>
 +  git checkout -b <neuer branch>
  
 oder (remote mit lokal mergen inkl. merge-commit) oder (remote mit lokal mergen inkl. merge-commit)
Zeile 260: Zeile 269:
  
 falls das mit Fehler abbricht (out of memory): falls das mit Fehler abbricht (out of memory):
 +
 +  fatal: Out of memory, realloc failed
 +  error: failed to run repack
  
 https://​stackoverflow.com/​questions/​4826639/​repack-of-git-repository-fails https://​stackoverflow.com/​questions/​4826639/​repack-of-git-repository-fails
 +
 +- neues ServerRepo anlegen (git init --bare)
 +- git-config erweitern
 +<​code>​
 +[http]
 +        receivepack = true
 +[pack]
 +        windowMemory = 16m
 +        packSizeLimit = 56m
 +        deltaCacheSize = 1
 +        threads = 1
 +</​code>​
 +- ggf. "git repack -a -d"
 +- via scp die neu gepackten (auf kleine chunks) auf den Server kopieren
 +<​code>​
 +scp .git/​objects/​pack/​* $server:/​$pfad/​$repo/​objects/​pack/​
 +scp -r .git/​packed-refs $server:/​$pfad/​$repo/​
 +</​code>​
 +- Rechte auf dem Server anpassen (chmod -R user:group .;chmod -R g+w .)
 +- jetzt erst den push durchführen (ggf. mit ssh)
 +<​code>​
 +git push --mirror ssh://​$server/​$pfad/​$repo
 +</​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.packedGitWindowSize 128
 +
 +in der gitconfig sieht das dann so aus:
 +
 +  [core]
 +    packedGitLimit = 128m
 +    packedGitWindowSize = 128
  
 ===== whitespace-fix ===== ===== whitespace-fix =====
Zeile 270: Zeile 316:
   git checkout -b branch-ws   git checkout -b branch-ws
   git am --whitespace=fix *.patch   git am --whitespace=fix *.patch
-  ​+ 
 +===== debugging ===== 
 +==== bisect ==== 
 +* https://​stackoverflow.com/​questions/​3179498/​how-can-i-cut-down-a-git-bisect-run-using-file-paths
 ===== Branch ===== ===== Branch =====
  
Zeile 431: Zeile 480:
 hier sieht man, dass ein Patch in arch/​arm/​Kconfig fehlgeschlagen ist. Dabei wird eine rej-Datei mit gleichem Namen angelegt (wie beim normalen Patch, nur git sagt es nicht). In dieser Datei ist jetzt nur der Abschnitt (Chunk) der nicht eingebracht werden kann. Dieser muss jetzt manuell eingefügt werden und danach sollte rej-Datei gelöscht werden. Das wiederholen für jede Datei die nicht komplett gepatcht werden konnte. hier sieht man, dass ein Patch in arch/​arm/​Kconfig fehlgeschlagen ist. Dabei wird eine rej-Datei mit gleichem Namen angelegt (wie beim normalen Patch, nur git sagt es nicht). In dieser Datei ist jetzt nur der Abschnitt (Chunk) der nicht eingebracht werden kann. Dieser muss jetzt manuell eingefügt werden und danach sollte rej-Datei gelöscht werden. Das wiederholen für jede Datei die nicht komplett gepatcht werden konnte.
  
-sind alle Patches angewendet, müssen die Änderungen noch übernommen werden (in das staging) via "git add <datei/verzeichnis>"​+sind alle Patches angewendet, müssen die Änderungen noch übernommen werden (in das staging) via "git add <​verzeichnis/datei>"
  
 zum Schluss wird "git am --continue"​ aufgerufen um den aktuellen Commit abzuschließen und ggf. mit dem nächsten anzufangen zum Schluss wird "git am --continue"​ aufgerufen um den aktuellen Commit abzuschließen und ggf. mit dem nächsten anzufangen
Zeile 454: Zeile 503:
 </​code>​ </​code>​
  
 +==== fremdes repo einbinden und branches nutzen ====
 +
 +<​code>​
 +git remote add vdorst https://​github.com/​vDorst/​linux-1.git
 +git fetch --all
 +git log --oneline vdorst/​5.0-phy
 +git checkout vdorst/​5.0-phy #​losgelöster head, da branch lokal noch nicht existiert
 +git checkout -b 5.0-phy #branch lokal anlegen
 +git push --set-upstream origin 5.0-phy #ins eigene remote-repo pushen
 +</​code>​
 ==== mehrere Push-Repos ==== ==== mehrere Push-Repos ====
  
Zeile 483: Zeile 542:
  
 ===== git send-email ===== ===== git send-email =====
 +
 +  sudo apt-get install git-email
  
 https://​www.freedesktop.org/​wiki/​Software/​PulseAudio/​HowToUseGitSendEmail/​ https://​www.freedesktop.org/​wiki/​Software/​PulseAudio/​HowToUseGitSendEmail/​
 +
 +die History (changes since vX) unter die Signed-off-by mit --- getrennt
  
 patch erzeugen (Version X von sha1 bis sha2 mit Erzeugung des Patch#0): patch erzeugen (Version X von sha1 bis sha2 mit Erzeugung des Patch#0):
Zeile 496: Zeile 559:
 Empfänger ermitteln: Empfänger ermitteln:
  
-  scripts/​get_maintainer.pl --norolestats ​0001-net-dsa-adding-fields-for-holding-information-about-.patch ​+  scripts/​get_maintainer.pl --norolestats ​*.patch  
 +  scripts/​get_maintainer.pl v6-00{01..13}*.patch|sort -u
  
-und dann senden:+hier die committer rausnehmen ​und in den coverletter eintragen (1 mailingliste als To und die anderen als CC)
  
-  git send-email ​0000-cover-letter.patch 000{1..8}-net-*.patch+  ​To: linux-mediatek@lists.infradead.org 
 +  Cc: devicetree@vger.kernel.org,​ 
 +      linux-arm-kernel@lists.infradead.org,​ 
 +      ... 
 + 
 +und senden 
 + 
 +  ​git send-email ​--to-cover --cc-cover v6-*.patch
  
 http://​nickdesaulniers.github.io/​blog/​2017/​05/​16/​submitting-your-first-patch-to-the-linux-kernel-and-responding-to-feedback/​ http://​nickdesaulniers.github.io/​blog/​2017/​05/​16/​submitting-your-first-patch-to-the-linux-kernel-and-responding-to-feedback/​
 +
 +falls man jemanden vergessen hat, kann man die serie nochmal so schicken (vorher im coverletter die Mailadressen entfernen und ggf. auf das Nachsenden hinweisen):
 +
 +  git send-email --to=linux-arm-kernel@lists.infradead.org --suppress-cc=all v6-*.patch
 ===== Config ===== ===== Config =====
 ==== Benutzer/​Email konfigurieren ==== ==== Benutzer/​Email konfigurieren ====
Zeile 549: Zeile 624:
     kver = "!f() { make kernelversion;​ };f"     kver = "!f() { make kernelversion;​ };f"
     ckver = "!f() { git commit -a -m \"​update to $(make kernelversion)\";​ };f"     ckver = "!f() { git commit -a -m \"​update to $(make kernelversion)\";​ };f"
 +    current = rev-parse --abbrev-ref HEAD
 +    remote-diff = !git diff $1@{upstream}..$1@{0}
 </​code>​ </​code>​
  
programming/git/start.1557940689.txt.gz · Zuletzt geändert: 2019/05/15 19:18 von frank