Bürokrasi nedeniyle, bir rapor için depomdaki tüm değiştirilmiş dosyaların bir listesini almam gerekiyor (mevcut kaynak koduyla başladım).
Bu listeyi almak için ne yapmalıyım?
Bürokrasi nedeniyle, bir rapor için depomdaki tüm değiştirilmiş dosyaların bir listesini almam gerekiyor (mevcut kaynak koduyla başladım).
Bu listeyi almak için ne yapmalıyım?
Yanıtlar:
Belirli bir SHA ile mevcut taahhüdünüz arasında değiştirilen dosyalar için:
git diff --name-only <starting SHA> HEAD
veya değiştirilmiş ancak henüz taahhüt edilmemiş dosyaları dahil etmek istiyorsanız:
git diff --name-only <starting SHA>
Daha genel olarak, aşağıdaki sözdizimi size her zaman iki taahhüt arasında (SHA'ları veya diğer adlarıyla belirtilen) hangi dosyaların değiştiğini söyleyecektir:
git diff --name-only <commit1> <commit2>
git diff --name-only <SHA> <SHA>^
--name-statusBunun yerine bayrağı kullanmak, --name-onlydosyaların bir listesini almak ve Eklenen veya Değiştirilen gibi değişiklik durumlarını görmek için kullanışlıdır.
--name-statuskendilerine ne olduğunu gösteren notlarından bahsetmeli
Son işleminizden bu yana değiştirilen tüm dosyaların adlarını bulmak için:
git diff --name-only
Veya (izlenmemiş dosyalar dahil olmak üzere biraz daha fazla bilgi için):
git status
İşaretlenmemiş izlenen tüm değiştirilmiş dosyaları listelemek için :
git diff --name-only
Tüm aşamalı izlenen değiştirilmiş dosyaları listelemek için :
git diff --name-only --staged
Tüm aşamalı ve etiketsiz izlenen değiştirilmiş dosyaları listelemek için :
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
İzlenmeyen tüm dosyaları listelemek için (tarafından listelenenler git status, yok sayılan dosyalar dahil değil):
git ls-files --other --exclude-standard
Bir kabuk içinde bu kullanıyorsanız ve bu komutlar bir şey döndürülürse programlı kontrol etmek istiyorsanız, ilgilenen olacağım git diff'ın --exit-codeseçeneği.
Birçok dosya eklediğimde / değiştirdiğimde / sildiğimde (son işlemden bu yana), bu değişikliklere kronolojik sırayla bakmak istiyorum.
Bunun için kullanıyorum:
Hazırlanmamış tüm dosyaları listelemek için:
git ls-files --other --modified --exclude-standard
Her dosya için son değiştirilme tarihini almak için:
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
Rağmen ruvim yorumlarda önermek :
xargs -0 stat -c '%y %n' --
Bunları en eskiden en yeniye doğru sıralamak için:
sort
Bir takma ad kullanımı kolaylaştırır:
alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort'
Veya ( ruvim sayesinde daha kısa ve daha verimli )
alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'
Örneğin:
username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd
Şimdi modifikasyonlarımı en eskiden en yeniye doğru inceleyebilirim.
xargstek bir çağrı kullanmıyorsunuz stat? Tam bir astar:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Bu yüzden kullandım iki taahhüt arasında (sadece eklenen veya değiştirilen) arasında içerik değişti dosyaların bir listesine ihtiyacım var:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
Git diff belgelerinden farklı fark filtresi seçenekleri :
fark filtre = [(A | Cı | D | E | R | T | u | X | B) ... [*]]
Yalnızca Eklenen (A), Kopyalanan (C), Silinmiş (D), Değiştirilmiş (M), Yeniden Adlandırılan (R) dosyaları türlerini değiştirir (yani normal dosya, sembolik bağlantı, alt modül,…) değiştirilir (T), Birleştirilmemiş (U), Bilinmiyor (X) veya eşleşmeleri Kırık (B). Filtre karakterlerinin herhangi bir kombinasyonu (hiçbiri dahil) kullanılabilir. Kombinasyona * (Tümü veya Hiçbiri) eklendiğinde, karşılaştırmadaki diğer ölçütlerle eşleşen herhangi bir dosya varsa tüm yollar seçilir; diğer ölçütlerle eşleşen dosya yoksa hiçbir şey seçilmez.
Ayrıca, bu büyük harfler dışarıda bırakılmak üzere küçültülebilir. Örneğin --diff-filter = reklam, eklenen ve silinen yolları hariç tutar.
Eğer (örneğin A / M) sıra durumunu listelemek istiyorsanız, değişim --name-onlyiçin --name-status.
Değiştirilmemiş etiketsizler listesi git statusve aşağıdaki grepkomut kullanılarak elde edilebilir . Gibi bir şey git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
İle git showbenzer bir sonuç elde edebilirsiniz. İçinde git logyer alan dosyaların listesiyle birlikte taahhüdü ( görünümde göründüğü gibi ) görmek için şunu kullanın:
git show --name-only [commit-id_A]^..[commit-id_B]
[commit-id_A]İlk taahhüt nerede ve [commit-id_B]göstermek istediğinizden daha son taahhüttür.
^Sembolü ile özel dikkat . Bunu koymazsanız, commit-id_A bilgileri konuşlandırılmaz.
Değiştirilen dosyaları kontrol etmek istiyorsanız, hangi dosyaların en iyi şekilde değiştiğini kontrol etmek istiyorsanız, örneğin en iyi şekilde kullanmak gibi birçok küçük şeye dikkat etmeniz gerekir.
git status - değişiklikleri içeren dosyaları gösterir
hangi değişikliklerin yapılacağını bilmek istiyorsanız, bu yöntem kontrol edilebilir,
git diff - tüm dosyalardaki tüm değişiklikleri gösterir
yalnızca bir dosya değiştirildiğinde iyi olur
ve belirli bir dosyayı kontrol etmek istiyorsanız
git fark