kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
Edu Felipe
Edu Felipe
Question

Adaugă numai non-spațiu modificări

Am editor de text pentru a ajusta automat la sfârșit spațiu la salvarea unui fișier, și eu contribui la un proiect open source, care are grave probleme cu trailing spațiu.

De fiecare dată am încerca să prezinte un patch mai întâi trebuie să ignore toate spațiile albe-doar modificări de mână, pentru a alege doar informațiile relevante. Nu numai asta, dar atunci când am rula git rebazare am rula, de obicei, în mai multe probleme din cauza lor.

Ca atare, aș dori să fie în măsură să adăugați la index doar non-spațiu modificări, într-un mod similar ca git add-p are, dar fără a fi nevoie pentru a alege toate modificările mine.

Stie cineva cum se face acest lucru?

EDIT: am nu se poate schimba modul în proiectul de lucrări, și au decis, după o discuție pe lista de corespondență, să ignore acest lucru.

324 2010-08-18T18:51:50+00:00 8
 Lii
Lii
Întrebarea editată 13 ianuarie 2018 в 7:37
Programare
whitespace
git
Solution / Answer
Colin Hebert
Colin Hebert
22 august 2011 в 3:14
2011-08-22T15:14:27+00:00
Mai mult
Sursă
Editează
#10905697

@Frew soluție a fost't destul de ceea ce am nevoie, astfel încât acesta este alias-am făcut pentru exact aceeasi problema:

alias.addnw=!sh -c 'git diff -U0 -w --no-color "$@" | git apply --cached --ignore-whitespace --unidiff-zero -'

Sau puteți rula pur și simplu:

git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero -

Update

Adăugat opțiuni -U0 " și " --unidiff-zero, respectiv pentru soluție context potrivire probleme, în conformitate cu acest comentariu.

Practic se aplică patch-uri care ar putea fi aplicate cu " add " fără spațiu modificări. Veți observa că după o git addnw ta/file nu va fi în continuare nestaditizat schimbări, l's de spații goale în stânga.

... Nu-culoarea e't de necesare, dar ca am culori setat la întotdeauna, am să-l folosească. Oricum, mai bine în siguranță decât îmi pare rău.

 Community
Community
Răspuns editat 23 mai 2017 в 11:54
373
0
Frew Schmidt
Frew Schmidt
10 iunie 2011 в 7:41
2011-06-10T19:41:48+00:00
Mai mult
Sursă
Editează
#10905695

Aceasta funcționează și pentru mine:

Dacă doriți să păstrați o rezervă în jurul valorii de, acest lucru funcționează

git stash && git stash apply && git diff -w > foo.patch && git checkout . && git apply foo.patch && rm foo.patch

Eu nu't ca ascunzători, dar nu ai într-un bug in git + cygwin unde am pierdut modificări, astfel încât să se asigure că lucrurile au mers la reflog cel puțin am stabilit următoarele:

git add . && git commit -am 'tmp' && git reset HEAD^ && git diff -w > foo.patch && git checkout . && git apply foo.patch && rm foo.patch

Practic vom crea un dif care nu't include modificările de spațiu, a reveni toate modificările, și apoi se aplică dif.

Frew Schmidt
Frew Schmidt
Răspuns editat 27 septembrie 2012 в 5:11
36
0
Steve Pitchers
Steve Pitchers
1 mai 2015 в 12:13
2015-05-01T12:13:30+00:00
Mai mult
Sursă
Editează
#10905698

Creați un fișier patch conține numai schimbări reale (cu excepția liniilor cu doar spațiu modificări), apoi a curăța spațiul de lucru și de a aplica patch-uri fisier:

git diff > backup
git diff-w > modificări
git reset-hard
patch-uri < schimbări

Revizuire diferențele rămase, apoi " add " și comit ca de obicei.

Echivalentul pentru Mercurial este de a face acest lucru:

hg dif > backup
hg diff-w > modificări
hg reveni ... tot
hg import ... nu-comite modificările

Steve Pitchers
Steve Pitchers
Răspuns editat 24 iulie 2015 в 5:51
30
0
Tom Hale
Tom Hale
14 septembrie 2016 в 10:00
2016-09-14T10:00:49+00:00
Mai mult
Sursă
Editează
#10905701

Adăugați următoarele la ta .gitconfig:

anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"

Datorită @Colin Herbert's a răspunde pentru inspirație.

Sintaxa Explicație

Final # trebuie să fie citat it's nu este tratată ca un comentariu în interiorul .gitconfig, ci devine trecut și este tratat ca un comentariu în interiorul shell - este introdus între sfârșitul anilor git se aplică și furnizate de utilizator argumente caregitplasează automat la sfârșitul liniei de comandă. Aceste argumente sunt&#39;t dorit aici - nu ne&#39;t vreigit aplicade a le consuma, prin urmare precedent comentariu caracter. Poate doriți să rulați această comandă caGIT_TRACE=1 git anw` pentru a vedea acest lucru în acțiune.

La -- semnale end de argumente și vă permite pentru cazul în care aveți un fișier numit -w sau ceva care ar arata ca un comutator pentru a git diff.

A scăpat dublu-ghilimele $@ sunt necesare pentru a păstra orice furnizate de utilizator, citat de argumente. Dacă la " personajul nu este scăpat, acesta va fi consumată de către .gitconfig parser și să nu ajungă la shell.

Notă: .gitconfig alias parsarea nu't recunoască single-citate ca pe ceva special - sale numai caractere speciale sunt ", \, \n, și ; (in afara de un "-citat string). Acesta este motivul pentru o" trebuie să fi întotdeauna a scăpat, chiar dacă se pare că-l's în interiorul unui singur șir citat (care git este complet agnostici).

Acest lucru este important, de exemplu. dacă aveți la îndemână un alias pentru a executa o bash comandă în arborele de lucru's rădăcină. Incorect de formulare este:

sh = !bash -c '"$@"' -

În timp ce cel corect este:

sh = !bash -c '\"$@\"' -
 Community
Community
Răspuns editat 23 mai 2017 в 12:26
10
0
 void.pointer
void.pointer
12 mai 2016 в 3:42
2016-05-12T15:42:15+00:00
Mai mult
Sursă
Editează
#10905699

Top-votat răspunsul nu funcționează în toate cazurile, datorită spațiu în patch-uri contextul în funcție de utilizatori, în comentarii.

Am revizuit de comandă, după cum urmează:

$ git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero

Acest lucru generează un patch cu nici un context. Ar trebui't fi o problemă, deoarece patch-uri este de scurtă durată.

Corespunzătoare alias, din nou, o revizuire a ceea ce a fost deja furnizate de către alți utilizatori:

addw = !sh -c 'git diff -U0 -w --no-color "$@" | git apply --cached --ignore-whitespace --unidiff-zero' -
10
0
 karmakaze
karmakaze
11 iunie 2011 в 12:56
2011-06-11T00:56:11+00:00
Mai mult
Sursă
Editează
#10905696

Cât despre următoarele:

git add `git diff -w --ignore-submodules |grep "^[+][+][+]" |cut -c7-`

Comanda în interiorul backquotes primește numele de fișiere care au non-spațiu modificări.

6
0
 cmcginty
cmcginty
18 august 2010 в 8:45
2010-08-18T20:45:33+00:00
Mai mult
Sursă
Editează
#10905694

Am găsit un git de pre-comite cârlig care elimină trailing spațiu. Cu toate acestea, dacă puteți't obține alții de a utiliza acest lucru, atunci s-ar putea să nu fie o soluție validă.

  #!/bin/sh

  if git-rev-parse --verify HEAD >/dev/null 2>&1 ; then
     against=HEAD
  else
     # Initial commit: diff against an empty tree object
     against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
  fi
  # Find files with trailing whitespace
  for FILE in `exec git diff-index --check --cached $against -- | sed '/^[+-]/d' | sed -r 's/:[0-9]+:.*//' | uniq` ; do
     # Fix them!
     sed -i 's/[[:space:]]*$//' "$FILE"
  done
  exit
-2
0
Kevin Vermeer
Kevin Vermeer
18 august 2010 в 7:07
2010-08-18T19:07:56+00:00
Mai mult
Sursă
Editează
#10905693

Tu ar trebui să ia în considerare mai întâi dacă la sfârșit spațiu este intenționată. Multe proiecte, inclusiv kernel-ul Linux, Opera, Drupal, și Kerberos (pentru a numi doar câteva din pagina de Wikipedia pe stil) interzice remorcarea spațiu. De la kernel-ul Linux, documentație:

Obține un editor decent și don't lași spațiile albe de la sfârșitul liniilor.

În cazul tău, problema este invers: anterior se angajează (și, poate, cele actuale) nu urmați acest ghid.

Am'd pariu că nimeni nu vrea cu adevărat la final spațiu, și de stabilire a problemei ar putea fi o schimbare binevenită. Alți utilizatori ar putea fi, de asemenea, se confruntă cu aceeași problemă ca și tine sunt. L's, de asemenea, probabil că contribuabil(s) care sunt adăugarea la sfârșit spațiu nu sunt conștienți că fac acest lucru.

Mai degrabă decât încercarea de a reconfigura git de a ignora problema, sau dezactivarea altfel de dorit funcționalitate în editor, am'd începe cu un post a proiectului lista de corespondență care să explice problema. Mulți editori (și git în sine) poate fi configurat să se ocupe cu trailing spațiu.

-2
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
Daniel Gogov
Înregistrat 6 zile în urmă
2
工藤 芳則
Înregistrat 1 săptămână în urmă
3
Ирина Беляева
Înregistrat 2 săptămâni în urmă
4
Darya Arsenyeva
Înregistrat 2 săptămâni în urmă
5
anyta nuam-nuam (LapuSiK)
Înregistrat 2 săptămâni în urmă
ID
JA
KO
RO
RU
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire