SORU
19 Mart 2012, PAZARTESİ


'In yarı gizli boş ağaç gıt

Git kimin iyi bilinen, ya da en azından sıralama-tanınmış, boş bir ağaç vardır:

4b825dc642cb6eb9a060e54bf8d69288fbee4904

(herhangi bir repo bu gördüğünüz, hatta yeni oluşturulan bir, git cat-file -t git cat-file -p).

Çok çalışıyor ve çok dikkatli ise bir bakıma gerçekten harika bir fikir olmasa da, bu boş ağacın dosyaları (answer to How do I add an empty directory to a git repository) olan bir dizini depolamak için kullanabilirsiniz.

Örnek kancaları biri yapar git diff-tree, bir argüman olarak daha faydalı.

Benim merak ettiğim şey,

  1. ne kadar güvenilir bu—yani, git biraz ileride sürüm gıt bir nesne 4b825dc642cb6eb9a060e54bf8d69288fbee4904 numaralı olacak değil mi?
  2. Neden boş ağaç (ya da var mı?) için sembolik bir isim yok.

(Hızlı ve kirli sembolik bir isim oluşturmak için bir yol, örneğin, .git/Nulltree SHA1 koymaktır. Ne yazık ki her repo için bunu yapmak zorundasın. Sadece komut sihirli sayı koymak daha iyi gibi görünüyor, vb. Keşke sihirli sayılar için genel bir isteksizlik var.)

CEVAP
19 Mart 2012, PAZARTESİ


This thread söz:

Boş ağaç hep birlikte türetmek sha1, hatırlamıyorum eğer:

git hash-object -t tree /dev/null

Boş sha1 ağacı olarak bu komut sonucu bir değişken tanımlamak için daha güvenlidir sanırım bu yüzden (a güvenmek yerine "iyi bilinen değer").


Not, yazarın ilk istediğinde bazı GitHub repo Yukarı SHA1 pop boş işlemek olduğunu görürsünüz (bkz:"How I initialize my Git repositories"): . blog yazısı

$ GIT_AUTHOR_DATE="Thu, 01 Jan 1970 00:00:00  0000" GIT_COMMITTER_DATE="Thu, 01 Jan 1970 00:00:00  0000" git commit --allow-empty -m 'Initial commit'

Verecektir size

Empty tree SHA1

(Bkz: ağaç SHA1?)

Hatta boş üstünde mevcut yapılanların özeti rebase ("git: how to insert a commit as the first, shifting all the others?")

Her iki durumda da, bu boş ağaç tam SHA1 değerini güvenmeyin.
Sadece bir izleyinen iyi yöntem, ilk boş olan repo başlatılıyor işlemek.


Bunu yapmak için:

git init my_new_repo
cd my_new_repo
git config user.name username
git config user.email email@com

git commit --allow-empty -m "initial empty commit"

Yaratılış (SHA1 anlamı her zaman farklı olacak commit) repo için SHA1 bir özel yapıyor, kullanıcı adı, e-posta, bir tarih oluşturur.
Ama ağaç katliamı olacak tarafından başvurulan4b825dc642cb6eb9a060e54bf8d69288fbee4904boş ağaç SHA1.

git log --pretty=raw

commit 9ed4ff9ac204f20f826ddacc3f85ef7186d6cc14
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904      <====
author VonC <vonc@laposte.net> 1381232247  0200
committer VonC <vonc@laposte.net> 1381232247  0200

    initial empty commit

Sadece bir ağaç katliamı göster (ağaç SHA1 taahhüt ekran):

git show --pretty=format:%T 9ed4ff9ac204f20f826ddacc3f85ef7186d6cc14
4b825dc642cb6eb9a060e54bf8d69288fbee4904

Eğer bu işlerse, boş bir ağaç başvuran, gerçekten seninilktaahhüt, boş ağaç SHA1 ile gösterebilirsiniz:

git log --pretty=format:%h --reverse | head -1 | xargs git show --pretty=format:%T
4b825dc642cb6eb9a060e54bf8d69288fbee4904

(ve hatta Windows üzerinde, Gnu On Windows komutları ile çalışır)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
Git

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • EmbarkToHeaven

    EmbarkToHeav

    3 EYLÜL 2007