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/07/22 20:47]
frank [aufräumen]
programming:git:start [2020/02/14 17:35] (aktuell)
frank [umbenannte Dateien]
Zeile 7: Zeile 7:
 <​code>​ <​code>​
 git clone --depth 1 https://​github.com/​frank-w/​BPI-R2-4.14 git clone --depth 1 https://​github.com/​frank-w/​BPI-R2-4.14
-git remote set-branches origin '​*'​ 
-git fetch --depth 1 
 </​code>​ </​code>​
  
Zeile 14: Zeile 12:
  
 <​code>​ <​code>​
-git clone --depth=50 --single-branch --branch ​v5.1-next-mt7621-phylink ​https://​github.com/​vDorst/linux-1.git mt76xx-phylink+git clone --depth ​--single-branch --branch ​5.4-main https://​github.com/​frank-w/BPI-R2-4.14 5.4-main
 </​code>​ </​code>​
 +
 +mit "​--single-branch"​ werden nur Informationen zum gewählten branch heruntergeladen
 +
 +  $ git branch -a
 +  * 5.4-main
 +    remotes/​origin/​5.4-main
 +
 +möchte man trotzdem alle branchinformationen haben nimmt man stattdessen "​--no-single-branch",​ dadurch ist aber der Download größer (depth x anzahl_branches)
 +
 +hat man nur die Sparvariante und möchte später wieder auf die anderen branches zugreifen:
 +
 +  git remote set-branches origin '​*'​
 +  git fetch --depth 1
 ===== log ===== ===== log =====
  
Zeile 63: Zeile 74:
   git remote   git remote
  
 +==== eigenes Format ====
 +
 +  git log --pretty=format:'​%C(Yellow)%h %C(Green)%ad %C(reset)%s %C(Cyan)(%an)'​ --date=short
 +
 +==== inklusive patch ====
 +
 +  git log --oneline -p
 +==== merges ====
 +
 +zuerst merge-commit ermitteln, z.B. so:
 +
 +  git log --merges
 +
 +danach kann man mit diesen Commit-Hash ermitteln, welche commits dran hängen
 +
 +  git log --no-merges --oneline <​hash>​^..<​hash>​
 +
 +Beispiel als alias:
 +
 +  logm = !git log --no-merges --oneline $1^..$1
 +
 +will man nur die Datei-Änderungen des kompletten merges sehen, kann man das so:
 +
 +  git show -m <​hash>​
 ===== diff ===== ===== diff =====
  
Zeile 73: Zeile 108:
 #​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 156: Zeile 195:
  
 <​code>​git tag -l</​code>​ <​code>​git tag -l</​code>​
 +
 +===== lokale Änderungen ignorieren =====
 +
 +soll eine Datei im remote-repo nicht mehr auf Änderungen überwacht werden:
 +
 +  git update-index --assume-unchanged [<​file>​ ...]
 +
 +tracking wieder aktivieren:
 +
 +  git update-index --no-assume-unchanged [<​file>​ ...]
  
 ===== push ===== ===== push =====
Zeile 185: Zeile 234:
  
 (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 266: Zeile 320:
 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) +  * neues ServerRepo anlegen (git init --bare) 
-git-config erweitern+  ​* ​git-config erweitern 
 <​code>​ <​code>​
 [http] [http]
Zeile 277: Zeile 332:
         threads = 1         threads = 1
 </​code>​ </​code>​
-- via scp die neu gepackten (auf kleine chunks) auf den Server kopieren + 
-<​code>​scp .git/​objects/​pack/​* $server:/​$pfad/​$repo/​objects/​pack/​+  * ggf. "git repack ​-a -d", dafür habe ich ein alias definiert<​code>​ 
 +cleanup = "!f() { git reflog expire --expire=now --all; git gc --aggressive --prune=now;​git repack -a -d; }; f"</​code>​ 
 +  * via scp die neu gepackten (auf kleine chunks) auf den Server kopieren 
 + 
 +<​code>​
 scp .git/​objects/​pack/​* $server:/​$pfad/​$repo/​objects/​pack/​ scp .git/​objects/​pack/​* $server:/​$pfad/​$repo/​objects/​pack/​
 scp -r .git/​packed-refs $server:/​$pfad/​$repo/​ scp -r .git/​packed-refs $server:/​$pfad/​$repo/​
-<​code>​ +</code> 
-Rechte auf dem Server anpassen (chmod -R user:group .;chmod -R g+w .) + 
-jetzt erst den push durchführen (ggf. mit ssh)+  * Rechte auf dem Server anpassen (chmod -R user:group .;chmod -R g+w .) 
 +  ​* ​jetzt erst den push durchführen (ggf. mit ssh) 
 <​code>​ <​code>​
 git push --mirror ssh://​$server/​$pfad/​$repo git push --mirror ssh://​$server/​$pfad/​$repo
Zeile 306: Zeile 367:
   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 330: Zeile 394:
 zeigt alle branches (lokal/​remote) mit letztem commit und push-info (x commits hinterher/​voraus) zeigt alle branches (lokal/​remote) mit letztem commit und push-info (x commits hinterher/​voraus)
  
 +==== Branches mit bestimmten commit finden ====
 +
 +  git branch --contains <​commit-id>​
 ==== remote branches aktualisieren ==== ==== remote branches aktualisieren ====
  
Zeile 529: Zeile 596:
  
 ===== 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 542: Zeile 613:
 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 577: Zeile 660:
  
   git config credential.helper 'cache --timeout=300'​   git config credential.helper 'cache --timeout=300'​
 +  ​
 +=== windows ===
 +
 +zurücksetzen von BN/PW:
 +
 +  rundll32.exe keymgr.dll, KRShowKeyMgr
 +
 +ggf. manager neu setzen (falls openssh-dialog kommt)
 +
 +  git config --global credential.helper manager
 +
 ==== Alias ==== ==== Alias ====
     git config alias.co checkout     git config alias.co checkout
Zeile 595: Zeile 689:
     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>​
  
Zeile 610: Zeile 706:
    ​renames = copies    ​renames = copies
    ​renamelimit = 0    ​renamelimit = 0
 +</​code>​
 +
 +==== bash-Integration ====
 +
 +in ~/.bashrc das vorhandene PS1 anpassen:
 +
 +<​code>​
 +parseGitBranch() {
 +    git rev-parse --abbrev-ref HEAD 2> /dev/null | sed -e '​s/​\(.*\)/​(\1)/'​
 +}
 +
 +if [ "​$color_prompt"​ = yes ]; then
 +    PS1='​${debian_chroot:​+($debian_chroot)}\[\033[01;​32m\]\u@\h\[\033[00m\]:​\[\033[01;​34m\]\w\[\033[00m\] $(parseGitBranch)\n\$ '
 +else
 +    PS1='​${debian_chroot:​+($debian_chroot)}\u@\h:​\w $(parseGitBranch)\n\$ '
 +fi
 </​code>​ </​code>​
 ====== Github ====== ====== Github ======
programming/git/start.1563821226.txt.gz · Zuletzt geändert: 2019/07/22 20:47 von frank