Git diff çıktısı okumak için nasıl`?
git-diff
man sayfasına göre oldukça uzun ve bir acemi için gerekli gibi görünmüyor olan çoğu şeyi açıklıyor. Örneğin:
git diff origin/master
CEVAP
Bir göz atalım örnek diff gıt tarihi ileri (commit 1088261f in git.git repository):
diff --git a/builtin-http-fetch.c b/http-fetch.c
similarity index 95%
rename from builtin-http-fetch.c
rename to http-fetch.c
index f3e63d7..e8f44ba 100644
--- a/builtin-http-fetch.c
b/http-fetch.c
@@ -1,8 1,9 @@
#include "cache.h"
#include "walker.h"
-int cmd_http_fetch(int argc, const char **argv, const char *prefix)
int main(int argc, const char **argv)
{
const char *prefix;
struct walker *walker;
int commits_on_stdin = 0;
int commits;
@@ -18,6 19,8 @@ int cmd_http_fetch(int argc, const char **argv, const char *prefix)
int get_verbosely = 0;
int get_recover = 0;
prefix = setup_git_directory();
git_config(git_default_config, NULL);
while (arg < argc && argv[arg][0] == '-') {
Sağlar çizgiyle bu yama satır analiz eder.
diff --git a/builtin-http-fetch.c b/http-fetch.c
ilk satır "git diff" şeklinde başlıkdiff --git a/file1 b/file2
.a/
b/
dosya yeniden adlandır/kopyala (bizim durumumuzda gibi) karışmadığı sürece aynıdır.--git
diff "" diff biçimi. git demek.Önümüzdeki bir veya daha fazla genişletilmiş başlık satırları. İlk üç
similarity index 95% rename from builtin-http-fetch.c rename to http-fetch.c
dosyahttp-fetch.c
19 *yeniden adlandırıldı ve bu iki dosya • oranında aynı bu yeniden tespit etmek için kullanılan () olduÄŸunu söylerler.
Son satır genişletilmiş diff başlığı olanindex f3e63d7..e8f44ba 100644
bahseder modu verilen dosya (100644
anlamına gelen sıradan bir dosya değil, örneğin sembolik ve yok çalıştırılabilir izni bit) ve kısaltılmış karma preimage (sürüm dosya önce verilen değişim) ve postimage (sürüm dosya değiştir). Bu hatgit am --3way
3 yönlü patch uygulanamaz birleştirme kendisi yapmak için kullanılır.
Sonraki iki satırı unified diff Başlığı
--- a/builtin-http-fetch.c b/http-fetch.c
Görediff -U
neden yok-dosya-değiştirme-zamanı-dosya değişiklik zamanı sonra kaynak (preimage) ve hedef (postimage) dosya adları. Eğer dosya oluşturulmuşsa kaynağı/dev/null
; eÄŸer dosya silinmiÅŸse, hedef/dev/null
.
EÄŸer setdiff.mnemonicPrefix
yapılandırma değişkeni için doğru yera/
b/
önekleri bu iki satır Başlığı alabilirsin yerinec/
,i/
,w/
veo/
gibi önekler, sırasıyla ne karşılaştırmak; git-config(1)Bir sonraki farkları bir veya daha yakışıklısı gelir; her hunk dosyaları farklı bir alan gösterir. Birleşik biçim yakışıklısı 33**biçiminde
@@ -1,8 1,9 @@
@@ -18,6 19,8 @@ int cmd_http_fetch(int argc, const char **argv, ...
gibi çizgi ile başlar. -Dosya-dizi biçimidir-<start line>,<number of lines>
dosya aralığı<start line>,<number of lines>
. Başlangıç satırı ve-sayısı çizgiler hem preimage ve postimage hunk konumu ve uzunluğu, sırasıyla bakın. Eğer numara--çizgiler gösterilmez ise 0 olduğu anlamına gelir.İsteğe bağlı üstbilgi gösterir C fonksiyonu her değişiklik, eğer bir C dosyası (
-p
seçeneği GNU diff) veya eşdeğeri için diğer türdeki dosyaları.Gelecek dosyaları farklı yerde açıklaması. Çizgiler her iki dosya için de ortak bir boşluk karakteri ile başlar. Aslında iki dosya arasındaki farklı satırları sol baskı sütununda aşağıdaki gösterge karakterlerden biri
- '' -- Bir çizgi burada ilk dosyasına eklendi.
- '-' -- Bir çizgi burada ilk dosyadan çıkarıldı.
Bu yüzden, örneğin, ilk parça#include "cache.h" #include "walker.h" -int cmd_http_fetch(int argc, const char **argv, const char *prefix) int main(int argc, const char **argv) { const char *prefix; struct walker *walker; int commits_on_stdin = 0; int commits;
const char *prefix;
satırı eklendicmd_http_fetch
main
tarafından değiştirildi anlamına gelir.Değişiklik, daha sonra 'yerleşik-http-yakala.uygun parça diğer bir deyişle, önce c' baktım bu dosya tipi:
#include "cache.h" #include "walker.h" int cmd_http_fetch(int argc, const char **argv, const char *prefix) { struct walker *walker; int commits_on_stdin = 0; int commits;
Değişiklikten sonra artık bu parça 'http getir.c' bu gibi görünüyor bunun yerine dosya:
#include "cache.h" #include "walker.h" int main(int argc, const char **argv) { const char *prefix; struct walker *walker; int commits_on_stdin = 0; int commits;
\ No newline at end of file
satır (örneğin diff değil) olabilir.
Donal Fellows said olarak en iyi sen değiştin biliyorum nerede gerçek yaşam örnekleri üzerinde okuma farklar uygulama.
Referanslar:
- git-diff(1) manpage, "Üreten-p ile yamalar" . bölüm
- (diff.info)Detailed Unified düğüm, "Birleşik bir Biçimi Ayrıntılı bir Açıklama".
Nasıl Node.js çevre değişkeni okumak i...
Nasıl bir BASH değişken bir komut çıkt...
Nasıl genişletmek için bir diff çöküşü...
Nasıl bir komut Çalıştır ve C içinde k...
Nasıl okumak için Parcelable uygularke...