From bc06ee94fa79cf431492137ff98d7142ed8e339e Mon Sep 17 00:00:00 2001 From: Tran Ngoc Quan Date: Fri, 14 Jan 2011 14:35:27 +0700 Subject: [PATCH] Continue edit secrets.txt --- vi/secrets.txt | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/vi/secrets.txt b/vi/secrets.txt index 5846ca3..cc75564 100644 --- a/vi/secrets.txt +++ b/vi/secrets.txt @@ -6,36 +6,36 @@ We take a peek under the hood and explain how Git performs its miracles. I will How can Git be so unobtrusive? Aside from occasional commits and merges, you can work as if you were unaware that version control exists. That is, until you need it, and that's when you're glad Git was watching over you the whole time. -Các hệ thống quản lý mã nguồn khác ép buộc bạn luôn luôn phải tranh đấu với thói quan liêu. Permissions of files may be read-only unless you explicitly tell a central server which files you intend to edit. Phần lớn các lệnh có thể chậm to a crawl as the number of users increases. Work grinds to a halt when the network or the central server goes down. +Các hệ thống quản lý mã nguồn khác ép buộc bạn luôn luôn phải tranh đấu với thói quan liêu. Quyền truy cập của các tệp tin có thể là chỉ cho phép đọc trừ phi bạn you explicitly tell a central server which files you intend to edit. Phần lớn các lệnh có thể chậm to a crawl as the number of users increases. Work grinds to a halt when the network or the central server goes down. -Đối lập với hạn chế trên, Git đơn giản giữ lịch sử của dự án của bạn trong thư mục `.git` trong thư mục làm việc của bạn. Đây là bản sao lịch sử của riêng bạn, do vậy bạn có thể làm việc không cần mạng cho đến khi bạn cần truyền thông với những người khác. You have total control over the fate of your files because Git can easily recreate a saved state from `.git` bất kỳ lúc nào. +Đối lập với hạn chế trên, Git đơn giản giữ lịch sử của dự án của bạn trong thư mục `.git` trong thư mục làm việc của bạn. Đây là bản sao lịch sử của riêng bạn, do vậy bạn có thể làm việc không cần mạng cho đến khi cần truyền thông với những người khác. Bạn có toàn quyền quyết định với các tệp tin của mình bởi vì Git có thể recreate a saved state from `.git` bất kỳ lúc nào một cách dễ dàng. === Tính Toàn vẹn === Phần lớn mọi người sử dụng phương pháp mã hóa để giữ cho thông tin của mình không bị nhòm ngó, nhưng có thứ quan trọng không kém đó là giữ cho thông tin của mình được toàn vẹn. Chính việc sử dụng hàm băm mã hóa đã làm ngăn ngừa sự sai hỏng dữ liệu do rủi ro hay ác ý. -Giá trị SHA1 có thể coi như là một số định danh 160-bit không trùng lắp cho mỗi chuỗi ký tự you'll encounter in your life. Actually more than that: every string of bytes that any human will ever use over many lifetimes. +Giá trị SHA1 có thể coi như là một số định danh 160-bit không trùng lắp cho mỗi chuỗi ký tự you'll encounter in your life. Actually more than that: mọi chuỗi ký tự every string of bytes that any human will ever use over many lifetimes. -Bản thân giá trị SHA1 cũng là một chuỗi ký tự, chúng ta có thể băm we can hash strings of bytes containing other hashes. This simple observation is surprisingly useful: look up 'hash chains'. We'll later see how Git uses it to efficiently guarantee data integrity. +Bản thân giá trị SHA1 cũng là một chuỗi ký tự, chúng ta có thể băm chuỗi có chứa giá trị băm khác. This simple observation is surprisingly useful: look up 'hash chains'. Sau này chúng ta sẽ thấy làm cách nào Git sử dụng nó để mà đảm bảo tính toàn vẹn của dữ liệu. -Tóm lại, Git lưu giữ dữ liệu của bạn trong thư mục con `.git/objects`, where instead of normal filenames, bạn sẽ chỉ nhìn thấy ID của chúng. Bằng cách sử dụng ID để làm tên tệp tin, as well as a few lockfiles and timestamping tricks, Git transforms any humble filesystem into an efficient and robust database. +Tóm lại, Git lưu giữ dữ liệu của bạn trong thư mục con `.git/objects`, thay vì sử dụng tên tệp tin như thông thường, bạn sẽ chỉ nhìn thấy ID của chúng. Bằng cách sử dụng ID để làm tên tệp tin, as well as a few lockfiles and timestamping tricks, Git transforms any humble filesystem into an efficient and robust database. === Thông Minh=== -Làm thể nào mà Git biết bạn đã đổi tên một tệp tin, dù là bạn chẳng bao giờ đề cập đến thực tế này the fact explicitly? Chắc chắn rồi, you may have run *git mv*, but that is exactly the same as a *git rm* theo sau bởi lệnh *git add*. +Làm thể nào mà Git biết bạn đã đổi tên một tệp tin, dù là bạn chẳng bao giờ đề cập đến điều này một cách rõ ràng? Chắc chắn rồi, you may have run *git mv*, nhưng but that is exactly the same as a *git rm* theo sau bởi lệnh *git add*. -Git heuristically ferrets out renames and copies between successive versions. Trên thực tế, nó có thể tìm ra từng đoạn mã nguồn đã bị di chuyển hay sao chép giữa các tệp tin! Though it cannot cover all cases, it does a decent job, and this feature is always improving. If it fails to work for you, try options enabling more expensive copy detection, and consider upgrading. +Git heuristically ferrets out renames and copies giữa các phiên bản liên tiếp. Trên thực tế, nó có thể tìm ra từng đoạn mã nguồn đã bị di chuyển hay sao chép giữa các tệp tin! Though it cannot cover all cases, it does a decent job, và đặc tính này luôn luôn được phát triển. If it fails to work for you, try options enabling more expensive copy detection, and consider upgrading. === Indexing === -For every tracked file, Git ghi lại các thông tin như là kích thước, thời gian tạo và lần cuối sửa đổi trong một tệp tin được biết đến là một mục lục 'index'. To determine whether a file has changed, Git compares its current stats with those cached in the index. Nếu chúng giống nhau, thế thì Git có thể bỏ qua việc đọc tệp tin đó lại lần nữa. +Với mọi tệp tin được theo dõi, Git ghi lại các thông tin như là kích thước, thời gian tạo và lần cuối sửa đổi trong một tệp tin được biết đến là một mục lục 'index'. Để xác định rõ một tệp tin có bị thay đổi hay không, Git so sánh nó ở thời điểm hiện tại với phần lưu giữ trong bộ nhớ. Nếu chúng giống nhau, thế thì Git có thể bỏ qua việc đọc tệp tin đó lại lần nữa. -Since stat calls are considerably faster than file reads, if you only edit a -few files, Git can update its state in almost no time. +Since stat calls are considerably faster than file reads, nếu bạn chỉ chỉnh sửa +vài tệp tin, Git can update its state in almost no time. We stated earlier that the index is a staging area. Why is a bunch of file stats a staging area? Because the add command puts files into Git's database -and updates these stats, while the commit command, without options, creates a +and updates these stats, while the commit command, mà không có tùy chọn, creates a commit based only on these stats and the files already in the database. === Git's Origins === @@ -46,8 +46,8 @@ http://lkml.org/lkml/2005/4/6/121[Linux Kernel Mailing List post] này describes Mỗi một phiên bản của dữ liệu của bạn được giữ trong 'object database', mà nó nằm trong thư mục con `.git/objects`; the other residents of `.git/` hold lesser data: -mục lục, tên các nhánh, các thẻ tag, các tùy chọn cấu hình, logs, the current -location of the head commit, và những thứ tương tự như thế. The object database is elementary yet +mục lục, tên các nhánh, các thẻ tag, các tùy chọn cấu hình, nhật ký, vị trí +hiện tại của location of the head commit, và những thứ tương tự như thế. The object database is elementary yet elegant, và cội nguồn sức mạnh của Git. Mỗi tệp tin trong `.git/objects` là một 'đối tượng'. Ở đây có 3 loại đối tượng @@ -76,8 +76,8 @@ bằng lệnh sau: $ printf "blob 6\000sweet\n" | sha1sum Git is 'content-addressable': tệp tin không được lưu trữ như theo tên của chúng, -but rather by the hash of the data they contain, trong tệp tin chúng ta gọi là một in a file we call a 'blob -object'. Chúng ta có thể nghĩ giá trị băm như là một định danh duy nhất cho nội dung của tệp tin, so +but rather by the hash of the data they contain, trong tệp tin chúng ta gọi là một 'đối tượng +blob'. Chúng ta có thể nghĩ giá trị băm như là một định danh duy nhất cho nội dung của tệp tin, so in a sense we are addressing files by their content. Phần khởi đầu `blob 6` đơn thuần chỉ là phần đầu của một merely a header consisting of the object type and its length in bytes; it simplifies internal bookkeeping. @@ -95,7 +95,7 @@ http://www.zlib.net/zpipe.c[zpipe -d], hay gõ: $ git cat-file -p aa823728ea7d592acc69b36875a482cdf3fd5c8d -which pretty-prints the given object. +lệnh này trình bày đối tượng được cho ở dạng dễ đọc trên màn hình. === Trees === @@ -131,7 +131,7 @@ Tệp tin này là một đối tượng cây 'tree': một danh sách các hàn tên tệp tin, và giá trị băm. Trong ví dụ của chúng ta, kiểu tệp tin là 100644, điều này có nghĩa `rose` là tệp tin bình thường, và giá trị băm là một đối tượng blob mà nó chứa nội dung của `rose'. Other possible file types are executables, symlinks or -directories. In the last case, the hash points to a tree object. +các thư mục. In the last case, the hash points to a tree object. Nếu bạn đã chạy lệnh filter-branch, you'll have old objects you no longer need. Mặc dù chúng sẽ bị loại bỏ một cách tự động một khi thời hạn chấm dứt đã đến, chúng ta sẽ @@ -146,15 +146,15 @@ destroying backups. Nếu bạn muốn làm sạch kho chứa, it is usually bes a fresh clone. Cũng thế, hãy cẩn thận khi thao tác trực tiếp với thư mục +.git+: điều gì xảy ra nếu lệnh Git cũng đang thực thi cùng lúc, hay là mất điện đột ngột? Đại khái, refs should be deleted with *git update-ref -d*, -though usually it's safe to remove +refs/original+ by hand. +though usually it's safe to remove +refs/original+ bằng tay. === Commits === -Chúng tôi đã giảng giải cho bạn 2 trong số 3 đối tượng (object). Cái thứ 3 chính là 'commit'. Its +Chúng tôi đã giảng giải cho bạn 2 trong số 3 đối tượng của Git. Cái thứ 3 chính là 'commit'. Its contents depend on the commit message as well as the date and time it was created. To match what we have here, we'll have to tweak it a little: - $ git commit --amend -m Shakespeare # Change the commit message. + $ git commit --amend -m Shakespeare # Thay đổi phần chú thích. $ git filter-branch --env-filter 'export GIT_AUTHOR_DATE="Fri 13 Feb 2009 15:31:30 -0800" GIT_AUTHOR_NAME="Alice" @@ -164,9 +164,9 @@ created. To match what we have here, we'll have to tweak it a little: GIT_COMMITTER_EMAIL="bob@example.com"' # Rig timestamps and authors. $ find .git/objects -type f -You should now see +Bạn có thể thấy You should now see +.git/objects/49/993fe130c4b3bf24857a15d7969c396b7bc187+ -which is the SHA1 hash of its contents: +là giá trị băm SHA1 của nội dung của nó: "commit 158" NUL "tree 05b217bb859794d08bb9e4f7f04cbda4b207fbe9" LF @@ -182,7 +182,7 @@ sẽ luôn luôn chứa it nhất là một dòng chỉ định commit cha. === Indistinguishable From Magic === -Bí mật của Git dường như có vẻ đơn giản. Nó giống như It looks like you could mix together a few shell scripts and add a dash of C code to cook it up in a matter of hours: a melange of basic filesystem operations and SHA1 hashing, garnished with lock files and fsyncs for robustness. In fact, this accurately describes the earliest versions of Git. Tuy nhiên, apart from ingenious packing tricks to save space, and ingenious indexing tricks to save time, we now know how Git deftly changes a filesystem into a database perfect for version control. +Bí mật của Git dường như có vẻ đơn giản. Nó giống như It looks like you could mix together a few shell scripts and add a dash of C code to cook it up in a matter of hours: a melange of basic filesystem operations and SHA1 hashing, garnished with lock files and fsyncs for robustness. Trên thực tế, this accurately describes the earliest versions of Git. Tuy nhiên, apart from ingenious packing tricks to save space, and ingenious indexing tricks to save time, we now know how Git deftly changes a filesystem into a database perfect for việc quản lý mã nguồn. Ví dụ, nếu một tệp tin bất kỳ nào đó trong if any file within the object database is corrupted by a disk error, then its hash will no longer match, điều này sẽ mang lại rắc rối cho chúng ta. By -- 2.11.4.GIT