ā§Ž.⧍ āĻāĻŋāĻ āĻāĻžāϏā§āĻāĻŽāĻžāĻāĻ āĻāϰāĻž – āĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ
āĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻāϏ
āĻāĻ āϏā§āĻāĻŋāĻāϏā§â āĻā§āϞā§āϰ āĻŽāϧā§āϝ⧠āĻāĻŋāĻā§ āϏā§āĻāĻŋāĻ āĻĒāĻžāĻĨ āĻāϰ āĻāύā§āϝāĻ āϏā§āĻ āĻāϰāĻž āϝāĻžā§, āϝā§āύ āĻāĻŋāĻ āĻāĻ āϏā§āĻāĻŋāĻāϏā§âāĻā§āϞ⧠āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻž āϏāĻžāĻŦ-āĻĢā§āϞā§āĻĄāĻžāϰ āĻ āĻĨāĻŦāĻž āĻĢāĻžāĻāϞ āĻāϰ āϏāĻžāĻŦāϏā§āĻ āĻāϰ āĻāĻĒāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻ āĻĒāĻžāĻĨ āϏā§āĻĒā§āĻā§āĻĢāĻŋāĻ āϏā§āĻāĻŋāĻāϏā§âāĻā§āϞāĻā§ āĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻāϏ āĻŦāϞāĻž āĻšā§ āĻāĻŦāĻ āĻāϰāĻž āĻĒā§āϰā§āĻā§āĻā§āĻ āĻāϰ āϝā§āĻā§āύ⧠āĻĄāĻžāĻāϰā§āĻā§āĻāϰāĻŋ āĻāϰ āĻŽāϧā§āϝ⧠(āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻāϰ āϰā§āĻ āĻĄāĻžāĻāϰā§āĻā§āĻāϰāĻŋ) .gitattributes āύāĻžāĻŽ āĻāϰ āĻĢāĻžāĻāϞ āĻ āϏā§āĻ āĻšā§ āĻ āĻĨāĻŦāĻž .git/info/attributes āĻĢāĻžāĻāϞ āĻ āϝāĻĻāĻŋ āύāĻž āĻāĻĒāύāĻŋ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻāϏ āĻĢāĻžāĻāϞ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻ āύāĻž āϰāĻžāĻāϤ⧠āĻāĻžāύāĨ¤
āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻāϏ āĻĻāĻŋā§ā§ āĻāĻĒāύāĻŋ, āĻĢāĻžāĻāϞ āĻŦāĻž āĻĄāĻžāĻāϰā§āĻā§āĻāϰāĻŋāϰ āĻāύā§āϝ āĻāĻŋāύā§āύ āĻŽāĻžāϰā§āĻ āϏā§āĻā§āϰā§āĻāĻŋāĻāĻŋ āϏā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āύāύ-āĻā§āĻā§āϏ āĻĢāĻžāĻāϞ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŋāĻ diff āĻāϰāĻŦā§, āĻ āĻĨāĻŦāĻž check in āĻāĻŋāĻāĻŦāĻž check out āĻāϰāĻžāϰ āĻāĻā§ āĻāĻŋāĻ āϝā§āύ āĻāύāĻā§āύā§āĻ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§. āĻāĻ āϏā§āĻāĻļāύ āĻ, āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻāĻŋāĻ āĻĒā§āϰāĻā§āĻā§āĻ āĻāϰ āĻĒāĻžāĻĨ āĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻāϏ āϏā§āĻ āĻāϰāĻž āĻāĻžāύāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āĻāĻŦāĻ āĻ āύā§āĻļā§āϞāύ⧠āĻāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāϝāĻŧā§āĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύāĨ¤
āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĢāĻžāĻāϞāϏ
āĻāĻāĻāĻŋ āĻāĻžāϞ āĻā§āĻļāϞ āϝāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻŋ āĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϤāĻž āĻšāϞ āĻāĻŋāĻ āĻā§ āĻŦāϞāĻž āϝ⧠āĻā§āύ āĻĢāĻžāĻāϞāĻā§āϞāĻŋ āĻŦāĻžāĻāύāĻžāϰāĻŋ (āĻā§āύ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻŋ āĻ āύā§āϝāĻĨāĻžāϝāĻŧ āĻŦā§āϰ āĻāϰāϤ⧠āύāĻžāĻ āĻĒāĻžāϰā§) āĻāĻŦāĻ āϏā§āĻ āĻĢāĻžāĻāϞāĻā§āϞāĻŋ āĻā§āĻāĻžāĻŦā§ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāĻŦā§āύ āϏ⧠āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻŋāĻ āĻā§ āĻŦāĻŋāĻļā§āώ āύāĻŋāϰā§āĻĻā§āĻļāύāĻž āĻĻā§āĻāϝāĻŧāĻžāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻŋāĻā§ āĻā§āĻā§āϏāĻ āĻĢāĻžāĻāϞ āĻŽā§āĻļāĻŋāύ āĻā§āύāĻžāϰā§āĻā§āĻĄ āĻšāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āϏā§āĻāĻž diff āĻāϰāĻž āϝāĻžā§ āύāĻž, āϝā§āĻāĻžāύ⧠āĻāĻŋāĻā§ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĢāĻžāĻāϞ āĻāĻŋāύā§āύ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŋāĻāĻā§ āĻŦāϞāϤ⧠āĻšāϝāĻŧ āĻā§āύāĻāĻŋāĨ¤
āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĢāĻžāĻāϞ āϏāύāĻžāĻā§āϤāĻāϰāĻŖÂ
āĻāĻŋāĻā§ āĻĢāĻžāĻāϞ āĻā§āĻā§āϏāĻ āĻĢāĻžāĻāϞā§āϰ āĻŽāϤ āĻĻā§āĻāϤ⧠āĻāĻŋāύā§āϤ⧠āĻŦāĻžāĻŦāĻšāĻžāϰ āĻāϰ āĻāύā§āϝ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĄāĻžāĻāĻž āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻŖā§āϝ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻŽā§āϝāĻžāĻāĻāĻāϏ -āĻ āĻāĻā§āϏ-āĻā§āĻĄ āĻĒā§āϰāĻāϞā§āĻĒāĻā§āϞāĻŋāϤ⧠āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āĻĨāĻžāĻā§ āϝāĻž .pbxproj -āĻ āĻļā§āώ āĻšāϝāĻŧ, āϝāĻž āĻŽā§āϞāϤ āĻāĻāĻāĻŋ āĻā§āϏāύ āĻĄāĻžāĻāĻžāϏā§āĻ āϝāĻž āĻāĻāĻĄāĻŋāĻ āĻĻā§āĻŦāĻžāϰāĻž āĻĄāĻŋāϏā§āĻ āĻ āϰāĻžāĻāĻ āĻšāϝāĻŧ, āϝāĻž āĻāĻĒāύāĻžāϰ āĻŦāĻŋāϞā§āĻĄ āϏā§āĻāĻŋāĻāϏ āĻāϤā§āϝāĻžāĻĻāĻŋ āϰā§āĻāϰā§āĻĄ āĻāϰā§āĨ¤ āϝāĻĻāĻŋāĻ āĻāĻāĻŋ āĻā§āĻāύāĻŋāĻā§āϝāĻžāϞāĻŋ āĻāĻāĻāĻŋ āĻā§āĻā§āϏāĻ āĻĢāĻžāĻāϞ (āĻāĻžāϰāĻŖ āĻāĻāĻŋ āϏāĻŦāĻ UTF-8), āĻāĻĒāύāĻŋ āĻāĻāĻŋāĻā§ āĻāĻŽāύāĻāĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāϤ⧠āĻāĻžāύ āύāĻž āĻāĻžāϰāĻŖ āĻāĻāĻŋ āϏāϤā§āϝāĻŋāĻ āĻāĻāĻāĻŋ āϞāĻžāĻāĻāĻā§ā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āĻ – āĻāĻĒāύāĻŋ āĻāύā§āĻā§āύā§āĻ āĻā§āϞāĻŋāĻā§ āĻŽāĻžāϰā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻž āϝāĻĻāĻŋ āĻĻā§’āĻāύ āĻŦā§āϝāĻā§āϤāĻŋ āĻāĻāĻŋāĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§, āĻāĻŦāĻ diffs āϏāĻžāϧāĻžāϰāĻŖāϤ āĻšā§āϞā§āĻĒāĻĢā§āϞ āύāĻžāĨ¤ āĻāĻ āĻĢāĻžāĻāϞ āĻŽā§āĻļāĻŋāύ āĻĻā§āĻŦāĻžāϰāĻž āĻŦāĻžāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āϤā§āϰāĻŋ āĻšā§āĨ¤ āϏāĻāĻā§āώā§āĻĒā§, āĻāĻĒāύāĻŋ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĢāĻžāĻāϞā§āϰ āĻŽāϤ⧠āĻāĻāϰāĻŖ āĻāϰāϤ⧠āĻāĻžāύāĨ¤
āϏāĻŽāϏā§āϤ pbxproj āĻĢāĻžāĻāϞāĻā§ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĄā§āĻāĻž āĻšāĻŋāϏāĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāϤ⧠āĻāĻŋāĻāĻā§ āĻŦāϞāϤā§, āĻāĻĒāύāĻžāϰ .gitattributes āĻĢāĻžāĻāϞ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϞāĻžāĻāύāĻāĻŋ āϝā§āĻā§āϤ āĻāϰā§āύ:
*.pbxproj binary
āĻāĻāύ, āĻāĻŋāĻ CRLF āϏāĻŽāϏā§āϝāĻžāĻā§āϞāĻŋ āĻāύāĻāĻžāϰā§āĻ āĻŦāĻž āĻĢāĻŋāĻā§āϏ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŦā§ āύāĻž; āĻ āĻĨāĻŦāĻž āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻ git show āĻŦāĻž git diff āĻāĻžāϞāĻžāύ āϤāĻāύ āĻāĻ āĻĢāĻžāĻāϞā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻāύā§āϝ āĻā§āύ⧠diff compute āĻŦāĻž print āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŦā§ āύāĻžāĨ¤
Â
āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĢāĻžāĻāϞā§āϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝ
āĻāĻĒāύāĻŋ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāĻā§ āϏāĻĢāϞ āĻāĻžāĻŦā§ diff āĻāϰāϤ⧠āĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āϰ āĻĢāĻžāĻāĻļāύāĻžāϞāĻŋāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĒāύāĻŋ āĻāĻŋāĻ āĻā§ āĻā§āĻāĻžāĻŦā§ āĻāĻĒāύāĻžāϰ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĄā§āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻā§āĻā§āϏāĻ āĻĢāϰāĻŽā§āĻ āĻ āĻāύāĻāĻžāϰā§āĻ āĻāϰāĻŦā§āύ āϤāĻž āĻŦāϞ⧠āĻāĻ āĻāĻžāĻāĻāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āϝā§āύ āϏā§āĻ āĻĢāĻžāĻāϞ āĻāĻŋ āύāϰāĻŽāĻžāϞ diff āĻĻāĻŋā§ā§ āĻāĻŽā§āĻĒā§ā§āĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤
āĻĒā§āϰāĻĨāĻŽāϤ, āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻŋāϰāĻā§āϤāĻŋāĻāϰ āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāϤ⧠āĻāĻ āĻā§āĻļāϞāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžā§ā§āύ: āϝāĻž āĻšāϞ āĻŽāĻžāĻāĻā§āϰā§āϏāĻĢā§āĻ āĻāϝāĻŧāĻžāϰā§āĻĄ āĻĄāĻā§āĻŽā§āύā§āĻāϏ āĻāϰ āĻāĻžāϰā§āϏāύ āĻāύā§āĻā§āϰā§āϞ āĻāϰāĻžāĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāϝāĻŧāĻžāϰā§āĻĄ āĻĄāĻā§āĻŽā§āύā§āĻ āĻā§āϞāĻŋāĻā§ āĻāĻžāϰā§āϏāύ āĻāύā§āĻā§āϰā§āϞ āĻāϰāϤ⧠āĻāĻžāύ āϤāĻŦā§ āĻāĻĒāύāĻŋ āϏā§āĻā§āϞāĻŋāĻā§ āĻāĻāĻāĻŋ āĻāĻŋāĻ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ āϤ⧠āϰāĻžāĻāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āύāĻŋā§āĻŽāĻŋāϤ āĻāĻŽāĻŋāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ; āĻāĻŋāύā§āϤ⧠āϤāĻžāϤ⧠āĻāĻŋ āϞāĻžāĻ? āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ git diff āĻāĻžāϞāĻžāύ āϤāĻŦā§ āĻāĻĒāύāĻŋ āĻā§āĻŦāϞ āĻāĻāϰāĻāĻŽ āĻāĻŋāĻā§ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ:
$ git diff
diff --git a/chapter1.docx b/chapter1.docx
index 88839c4..4afcb7c 100644
Binary files a/chapter1.docx and b/chapter1.docx differ
āĻāĻĒāύāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻĻā§āĻāĻŋ āĻāĻžāϰā§āϏāύ āϤā§āϞāύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻž āϝāĻĻāĻŋ āύāĻž āĻāĻĒāύāĻŋ āϏā§āĻā§āϞāĻŋ āĻĒāϰā§āĻā§āώāĻž āĻāϰ⧠āĻĻā§āĻā§āύ āĻāĻŦāĻ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āϏā§āĻā§āϝāĻžāύ āĻāϰā§āύ, āϤāĻžāĻ āύāĻž? āĻĻā§āĻāĻž āϝāĻžāĻā§āĻā§ āϝ⧠āĻāĻĒāύāĻŋ āĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻāĻžāϞāĻāĻžāĻŦā§ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĒāύāĻžāϰ .gitattributes āĻĢāĻžāĻāϞ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϞāĻžāĻāύāĻāĻŋ āϰāĻžāĻā§āύ:
*.docx diff=word
#!/bin/bash
docx2txt.pl "$1" -
āϏā§āĻ āĻĢāĻžāĻāϞāĻāĻŋāĻā§ `chmod a+x` āĻāϰāϤ⧠āĻā§āϞāĻŦā§āύ āύāĻžāĨ¤ āĻ āĻŦāĻļā§āώā§, āĻāĻĒāύāĻŋ āĻāĻ āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻāĻŋāĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
$ git config diff.word.textconv docx2txt
āĻāĻāύ āĻāĻŋāĻ āĻāĻžāύāĻŦā§ āϝ⧠āϝāĻĻāĻŋ āĻāĻŋāĻ āĻĻā§āĻāĻŋ āϏā§āύā§āϝāĻžāĻĒāĻļāĻ āĻāϰ āĻŽāϧā§āϝ⧠diff āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰ⧠āĻāĻŦāĻ āϝā§āĻā§āύ āĻĢāĻžāĻāϞ āϝāĻĻāĻŋ `.docx` āĻ āĻļā§āώ āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āϏā§āĻ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāĻā§ “āĻā§āĻžāϰā§āĻĄ” āĻĢāĻŋāϞā§āĻāĻžāϰ āĻĻāĻŋā§ā§ āϰāĻžāύ āĻāϰāϤā§Â āĻšāĻŦā§, āϝāĻž `docx2txt` āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻšāĻŋāϏā§āĻŦā§ āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ diff āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻžāϰ āĻāĻā§ āĻāĻŋāĻ āĻāĻžāϰā§āϝāĻāϰāĻāĻžāĻŦā§ āĻāĻĒāύāĻžāϰ āĻā§āĻžāϰā§āĻĄ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāϰ āĻā§āĻā§āϏāĻ āĻŦā§āĻāĻ āĻāĻžāϰā§āϏāύ āϤā§āϰāĻŋ āĻāϰāĻŦā§āĨ¤
Â
āĻāĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ āĻŦāĻ āĻāϰ āĻ āϧā§āϝāĻžā§ ā§§ āĻā§āĻžāϰā§āĻĄ āĻĢāϰāĻŽā§āĻ āĻ āĻāύāĻāĻžāϰā§āĻ āĻšāϝāĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻŋāĻ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ āϤ⧠āĻāĻŽāĻŋāĻ āĻšāϝāĻŧā§āĻā§āĨ¤ āϤāĻžāϰāĻĒāϰ āĻāĻāĻāĻŋ āύāϤā§āύ āĻĒā§āϝāĻžāϰāĻžāĻā§āϰāĻžāĻĢ āϝā§āĻ āĻāϰāĻž āĻšāϝāĻŧ.
`git diff` āύā§āĻā§āϰ āĻāĻāĻāĻĒā§āĻ āĻĻā§āĻāĻžāĻŦā§:
$ git diff
diff --git a/chapter1.docx b/chapter1.docx
index 0b013ca..ba25db5 100644
--- a/chapter1.docx
+++ b/chapter1.docx
@@ -2,6 +2,7 @@
This chapter will be about getting started with āĻāĻŋāĻ. We will begin at the beginning by explaining some background on version control tools, then move on to how to get āĻāĻŋāĻ running on your system and finally how to get it setup to start working with. At the end of this chapter you should understand why Git is around, why you should use it and you should be all setup to do so.
1.1. About Version Control
What is "version control", and why should you care? Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. For the examples in this book you will use software source code as the files being version controlled, though in reality you can do this with nearly any type of file on a computer.
+Testing: 1, 2, 3.
If you are a graphic or web designer and want to keep every version of an image or layout (which you would most certainly want to), a Version Control System (VCS) is a very wise thing to use. It allows you to revert files back to a previous state, revert the entire project back to a previous state, compare changes over time, see who last modified something that might be causing a problem, who introduced an issue and when, and more. Using a VCS also generally means that if you screw things up or lose files, you can easily recover. In addition, you get all this for very little overhead.
1.1.1. Local Version Control Systems
Many people's version-control method of choice is to copy files into another directory (perhaps a time-stamped directory, if they're clever). This approach is very common because it is so simple, but it is also incredibly error prone. It is easy to forget which directory you're in and accidentally write to the wrong file or copy over files you don't mean to.
āĻāĻŋāĻ āϏāĻĢāϞāĻāĻžāĻŦā§ āĻāĻŦāĻ āϏāĻāĻā§āώāĻŋāĻĒā§āϤāĻāĻžāĻŦā§ āĻāĻŽāĻžāĻĻā§āϰ āĻŦāϞā§āĻā§ āϝ⧠āĻāĻŽāϰāĻž “āĻā§āϏā§āĻāĻŋāĻāĻ ā§§, ⧍, ā§Š” āϏā§āĻā§āϰāĻŋāĻ āϝā§āĻ āĻāϰā§āĻāĻŋ , āϝāĻž āϏāĻ āĻŋāĻāĨ¤ āĻāĻāĻŋ āύāĻŋāĻā§āĻāϤ āύāϝāĻŧ – āĻĢāϰā§āĻŽā§āϝāĻžāĻāĻŋāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻāĻāĻžāύ⧠āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāĻŦā§ āύāĻž – āϤāĻŦā§ āĻāĻāĻŋ āĻ āĻŦāĻļā§āϝāĻ āĻāĻžāĻ āĻāϰā§ā§ˇ
Â
āĻāϰā§āĻāĻāĻŋ āĻāĻāϰā§āώāĻŖā§āϝāĻŧ āϏāĻŽāϏā§āϝāĻž āϝāĻž āĻāĻĒāύāĻŋ āĻāĻāĻāĻžāĻŦā§ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϤāĻž āĻšāϞ āĻĻā§āĻāϤāĻŋ āĻāĻŽā§āĻāĻ āĻĢāĻžāĻāϞā§āϰ diff āĻŦā§āϰ āĻāϰāĻžāĨ¤ āĻāĻāĻŋ āĻāϰāĻžāϰ āĻāĻāĻāĻŋ āĻāĻĒāĻžāϝāĻŧ āĻšāϞ āĻāĻāĻāĻŋ āĻĢāĻŋāϞā§āĻāĻžāϰā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻŽā§āĻ āĻĢāĻžāĻāϞ āϰāĻžāύ āĻāϰāĻž āϝāĻž āϤāĻžāĻĻā§āϰ EXIF āϤāĻĨā§āϝ āĻŦā§āϰ āĻāϰāĻŦā§ â āĻŽā§āĻāĻžāĻĄāĻžāĻāĻž āϝāĻž āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻāĻŽā§āĻ āĻĢāϰāĻŽā§āϝāĻžāĻā§āϰ āϏāĻžāĻĨā§ āĻĨāĻžāĻā§āĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ `exiftool` āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāĻŦāĻ āĻāύāϏā§āĻāϞ āĻāϰā§āύ, āĻāĻĒāύāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻĒāύāĻžāϰ āĻāĻŽā§āĻāĻ āĻā§āϞāĻā§ āĻŽā§āĻāĻžāĻĄāĻžāĻāĻž āĻāϰ āĻā§āĻā§āϏāĻ āĻ āĻāύāĻāĻžāϰā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϝā§āύ diff āĻ āύā§āϤāϤ āĻā§āĻāĻā§āĻ āĻā§āϞā§āϰ āĻā§āĻā§āϏāĻā§ā§āĻžāϞ āϰāĻŋāĻĒā§āϰā§āĻā§āύā§āĻā§āĻļāύ āĻĻā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻĒāύāĻžāϰ `.gitattributes` āĻĢāĻžāĻāϞ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϞāĻžāĻāύāĻāĻŋ āϞāĻŋāĻā§āύ:
*.png diff=exif
āĻāĻ āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻāĻŋāĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰā§āύ:
$ git config diff.exif.textconv exiftool
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āĻā§āĻ āĻ āĻāĻāĻāĻŋ āĻāĻŽā§āĻāĻ āϰāĻŋāĻĒā§āϞā§āϏ āĻāϰā§āύ āĻāĻŦāĻ `git diff` āĻāĻžāϞāĻžāύ, āĻāĻĒāύāĻŋ āĻāĻāϰāĻāĻŽ āĻāĻŋāĻā§ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ:
diff --git a/image.png b/image.png
index 88839c4..4afcb7c 100644
--- a/image.png
+++ b/image.png
@@ -1,12 +1,12 @@
ExifTool Version Number : 7.74
-File Size : 70 kB
-File Modification Date/Time : 2009:04:21 07:02:45-07:00
+File Size : 94 kB
+File Modification Date/Time : 2009:04:21 07:02:43-07:00
File Type : PNG
MIME Type : image/png
-Image Width : 1058
-Image Height : 889
+Image Width : 1056
+Image Height : 827
Bit Depth : 8
Color Type : RGB with Alpha
āĻāĻĒāύāĻŋ āϏāĻšāĻā§āĻ āĻĻā§āĻāϤ⧠āĻĒāĻžāϰā§āύ āϝ⧠āĻĢāĻžāĻāϞ āϏāĻžāĻāĻ āĻāĻŦāĻ āĻŽā§āĻāĻ āĻĄāĻžāĻāĻŽā§āύāĻļāύ āĻāĻāϝāĻŧāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāĻŋāϤ āĻšāϝāĻŧā§āĻā§āĨ¤
Â
āĻā§āĻāϝāĻŧāĻžāϰā§āĻĄ āĻāĻā§āϏāĻĒā§āύāĻļāύÂ
SVN- āĻŦāĻž CVS- āϏāĻŋāϏā§āĻā§āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžāϰāĻž āĻ āĻā§āϝāϏā§āϤ āϤāĻžāϰāĻž āĻĒā§āϰāĻžā§āĻ āĻā§āĻāϝāĻŧāĻžāϰā§āĻĄ āĻāĻā§āϏāĻĒā§āύāĻļāύ āĻĢāĻŋāĻāĻžāϰ āĻāĻž āĻāĻžā§.
āĻāĻŋāĻā§ āĻāϰ āĻĒā§āϰāϧāĻžāύ āϏāĻŽāϏā§āϝāĻž āĻšāϞ āĻāĻĒāύāĻŋ āĻāĻŽāĻŋāĻ āĻāϰāĻžāϰ āĻĒāϰ⧠āĻāĻŽāĻŋāĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āϤāĻĨā§āϝ āϝ⧠āĻĢāĻžāĻāϞ āĻ āϞā§āĻāĻž āĻĨāĻžāĻā§ āϤāĻžÂ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻž, āĻāĻžāϰāĻŖ āĻāĻŋāĻ āĻĒā§āϰāĻĨāĻŽā§ āĻĢāĻžāĻāϞāĻāĻŋāϰ āĻā§āĻāϏāĻžāĻŽ āĻāϰā§āĨ¤ āĻāĻŋāύā§āϤā§, āĻāĻĒāύāĻŋ āĻā§āύ āĻĢāĻžāĻāϞ check out āĻāϰāĻžāϰ āĻĒāϰ āϤāĻžāϤ⧠āĻā§āĻā§āϏāĻ āĻ ā§āϝāĻžāĻĄ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻāĻŽāĻŋāĻ āĻāϰāĻžāϰ āĻāĻā§ āϏā§āĻāĻž āϰāĻŋāĻŽā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻĻāĻŋā§ā§ āĻĻā§āĻ āĻāĻžāĻŦā§ āĻāĻāĻŋ āĻāϰāĻž āϝāĻžā§.
Â
āĻĒā§āϰāĻĨāĻŽā§, āĻĢāĻžāĻāϞ āĻāϰ `$Id$` āύāĻžāĻŽā§āϰ āĻĢāĻŋāϞā§āĻĄā§ āĻ āĻŦā§āϞāĻŦ āĻāϰ āĻā§āĻāϏāĻžāĻŽ āĻ āĻā§āĻŽā§āĻāĻŋāĻā§āϝāĻžāϞāĻŋ āϰāĻžāĻāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ āĻĢāĻžāĻāϞ āĻ āϏā§āĻ āĻāϰā§āύ, āϤāĻžāϰāĻĒāϰ āĻĒāϰā§āϰ āĻŦāĻžāϰ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āϏā§āĻ āĻŦā§āϰāĻžāĻā§āĻ āĻāĻž check out āĻāϰā§āύ , āĻāĻŋāĻ āϏā§āĻ āĻĢāĻŋāϞā§āĻĄ āĻā§ āĻŦā§āϞāĻŦ āĻāϰ SHA-1 āĻ āϰāĻŋāĻĒā§āϞā§āϏ āĻāϰāĻŦā§āĨ¤ āĻāĻāĻž āϞāĻā§āώ āĻāϰāĻž āĻāϰā§āϰ⧠āϝ⧠āĻāĻ SHA-1 āĻāĻŋ āĻāĻŽāĻŋāĻ āĻāϰ SHA-1 āύāĻž, āĻŦā§āϞāĻŦ āĻāϰ SHA-1.āĻāĻĒāύāĻžāϰ `.gitattributes` āĻĢāĻžāĻāϞ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϞāĻžāĻāύāĻāĻŋ āϞāĻŋāĻā§āύ:
*.txt ident
āĻāĻāĻāĻŋ āĻā§āϏā§āĻ āĻĢāĻžāĻāϞ⧠āĻāĻāĻāĻŋ `$Id$` āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻāĻĄ āĻāϰā§āύ:
$ echo '$Id$' > test.txt
āĻĒāϰā§āϰ āĻŦāĻžāϰ āϝāĻāύ āĻāĻĒāύāĻŋ āĻāĻ āĻĢāĻžāĻāϞāĻāĻŋ check out āĻāϰāĻŦā§āύ, āĻāĻŋāĻ āĻŦā§āϞāĻŦ āĻāϰ SHA-1 āĻāĻŋ āĻāύāĻā§āĻā§āĻ āĻāϰāĻŦā§:
$ rm test.txt
$ git checkout -- test.txt
$ cat test.txt
$Id: 42812b7653c7b88933f8a9d6cad0ca16714b9bb3 $


āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ `.gitattributes` āĻĢāĻžāĻāϞ⧠āĻĢāĻŋāϞā§āĻāĻžāϰ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āϏā§āĻ āĻāϰ⧠`\*.c` āĻĢāĻžāĻāϞāĻā§āϞāĻŋāĻā§ “`āĻāύā§āĻĄā§āύā§āĻ`” āĻĢāĻŋāϞā§āĻāĻžāϰ āĻĻāĻŋāϝāĻŧā§ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰ⧠āϏā§āĻ āĻāĻĒ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
*.c filter=indent
āϤāĻžāϰāĻĒāϰ, āĻāĻŋāĻ āĻā§ āĻŦāϞā§āύ “āĻāύā§āĻĄā§āύā§āĻ” āĻĢāĻŋāϞā§āĻāĻžāϰ smudge āĻāĻŦāĻ clean āĻāϰ āĻā§āώā§āϤā§āϰ⧠āĻā§ āĻāϰā§:
$ git config --global filter.indent.clean indent
$ git config --global filter.indent.smudge cat
āĻāĻ āĻā§āώā§āϤā§āϰā§, āĻāĻĒāύāĻŋ āϝāĻāύ `*.c` āĻāϰ āϏāĻžāĻĨā§ āĻŽā§āϞ⧠āĻāĻŽāύ āĻĢāĻžāĻāϞ āĻāĻŽāĻŋāĻ āĻāϰā§āύ, āĻāĻŋāĻ āϤāĻžāĻĻā§āϰ āϏā§āĻā§āĻ āĻāϰāĻžāϰ āĻāĻā§ āĻāύā§āĻĄā§āύā§āĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻžāϞāĻžāĻŦā§ āĻāĻŦāĻ āĻĄāĻŋāϏā§āĻ āĻ Â check out āĻāϰāĻžāϰ āĻāĻā§ `cat` āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻžāϞāĻžāĻŦā§āĨ¤ `cat` āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāϏāϞ⧠āĻŦā§āĻļāĻŋ āĻāĻŋāĻā§ āĻāϰ⧠āύāĻž: āĻāĻāĻž āĻāύāĻĒā§āĻ āĻ āϝ⧠āĻĄāĻžāĻāĻž āĻāĻā§ āϤāĻžāĻ āĻĻā§āĻāĻžā§āĨ¤ āĻāĻ āĻāĻŽā§āĻŦāĻŋāύā§āĻļāύ āĻāĻžāϰā§āϝāĻāϰāĻāĻžāĻŦā§ āϏāĻŽāϏā§āϤ āϏāĻŋ āϏā§āϰā§āϏ āĻā§āĻĄ āĻĢāĻžāĻāϞāĻā§ āĻāĻŽāĻŋāĻ āĻāϰāĻžāϰ āĻāĻā§ `āĻāύā§āĻĄā§āύā§āĻ` āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĢāĻŋāϞā§āĻāĻžāϰāϏ āĻāϰā§āĨ¤
Â
āĻāϰā§āĻāĻāĻŋ āĻŽāĻāĻžāĻĻāĻžāϰ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāϞ `$Date$`āĻāĻŋ-āĻā§āĻžāϰā§āĻĄ āĻāĻā§āϏāĻĒā§āύāĻļāύ, RCS āϏā§āĻāĻžāĻāϞ⧠āĻāĨ¤ āĻāĻāĻŋ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāϰāϤā§, āĻāĻĒāύāĻžāϰ āĻāĻāĻāĻŋ āĻā§āĻ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻĻāϰāĻāĻžāϰ āϝāĻž āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞā§āϰ āύāĻžāĻŽ āĻāύāĻĒā§āĻ āύā§āĻŦā§, āĻāĻ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻāϰ āĻāύā§āϝ āϏāϰā§āĻŦāĻļā§āώ āĻāĻŽāĻŋāĻ āĻĄā§āĻāĻ āĻŦā§āϰ āĻāϰāĻŦā§, āĻāĻŦāĻ āϏā§āĻ āĻĄā§āĻāĻ āĻāĻŋ āĻĢāĻžāĻāϞ⧠āϏā§āĻ āĻāϰāĻŦā§āĨ¤ āύāĻŋāĻā§āϰ Ruby āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻŋ āϤāĻžāĻ āĻāϰā§:
#! /usr/bin/env ruby
data = STDIN.read
last_date = `git log --pretty=format:"%ad" -1`
puts data.gsub('$Date$', '$Date: ' + last_date.to_s + '$')
āĻāĻ āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻāĻŋ `git log` āĻāĻŽāĻžāύā§āĻĄ āĻĨā§āĻā§ āϞā§āĻā§āϏā§āĻ āĻāĻŽāĻŋāĻ āĻĄā§āĻāĻ āĻŦā§āϰ āĻāϰāĻŦā§ āĻāĻŦāĻ āϏā§āĻ āϰā§āĻāĻžāϞā§āĻ stdin āĻāϰ `$Date$` āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻ āϞāĻŋāĻā§ āĻĻāĻŋāĻŦā§ – āĻāĻāĻž āĻāĻĒāύāĻŋ āϝā§āĻā§āύ⧠āϞā§āϝāĻžāĻā§āĻā§ā§ā§āĻ āĻ āĻāĻŽāĻĒā§āϞā§āĻŽā§āύā§āĻ āĻāϰāĻž āϝāĻžāĻŦā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻ āĻĢāĻžāĻāϞāĻāĻŋāϰ āύāĻžāĻŽ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύ `expand_date` āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻĒāĻžāĻĨ āĻ āϰāĻžāĻāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻāύ āĻāĻĒāύāĻžāĻā§ āĻāĻŋāĻ āĻ āĻāĻāĻāĻŋ āĻĢāĻŋāϞā§āĻāĻžāϰ āϏā§āĻāĻāĻĒ āĻāϰāϤ⧠āĻšāĻŦā§ (āύāĻžāĻŽ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύ `dater`) āĻāĻŦāĻ āϤāĻžāĻā§ checkout āĻāϰāĻžāϰ āϏāĻŽā§ smudge āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāϰ `expand_date` āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāĻŋ āĻŦā§āϝāĻžāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻŦāϞāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻŽāĻŋāĻ āĻāϰ āϏāĻŽā§ clean āĻāϰāϤ⧠āĻĒāĻžāϰā§āϞ āĻāĻā§āϏāĻĒā§āϰā§āĻļāύ āĻŦā§āϝāĻžāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
$ git config filter.dater.smudge expand_date
$ git config filter.dater.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'
āĻāĻ āĻĒāĻžāϰā§āϞ āϏā§āύāĻŋāĻĒā§āĻ `$Date$` āĻāϰ āĻŽāϧā§āϝ⧠āϝāĻž āĻĒāĻžāĻŦā§ āϤāĻž āĻĢāĻžāĻāĻž āĻāϰ⧠āĻĢā§āϞāĻŦā§, āϝā§āύ āĻĢāĻžāĻāϞ āĻāϰ āĻāĻā§āϰ āĻāĻžā§āĻāĻžāĻ āϝāĻžāĻā§āĻž āϝāĻžā§āĨ¤ āĻāĻāύ āϝā§āĻšā§āϤ⧠āĻāĻĒāύāĻžāϰ āĻĢāĻŋāϞā§āĻāĻžāϰ āϰā§āĻĄāĻŋ āĻšā§ā§āĻā§, āĻāĻĒāύāĻŋ āĻāĻāĻžāĻā§ āĻā§āύ āĻĢāĻžāĻāϞ āĻāĻžāĻāĻĒ āĻāϰ āĻāύā§āϝ āĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āϏā§āĻ āĻāϰ⧠āĻāĻŦāĻ $Date$` āĻāĻŋ-āĻā§āĻžāϰā§āĻĄ āĻāϰ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰ⧠āĻā§āϏā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
date*.txt filter=dater
$ echo '# $Date$' > date_test.txt
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏā§āĻ āĻā§āĻāĻā§āĻ āĻā§āϞ⧠āĻāĻŽāĻŋāĻ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻŦāĻžāϰ āϏā§āĻ āĻĢāĻžāĻāϞ āĻāĻŋ check out āĻāϰā§āύ āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ āϝ⧠āĻāĻŋ-āĻā§āĻžāϰā§āĻĄ āĻ āĻŋāĻāĻŽāϤ āϏāĻžāĻŦāϏā§āĻāĻŋāĻāĻ āĻšā§ā§āĻā§āĻ
$ git add date_test.txt .gitattributes
$ git commit -m "Test date expansion in Git"
$ rm date_test.txt
$ git checkout date_test.txt
$ cat date_test.txt
# $Date: Tue Apr 21 07:26:52 2009 -0700$
āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻā§āĻā§āύ āϝ⧠āĻāĻ āĻā§āĻāύāĻŋāĻ āĻāĻŋ āĻāĻžāϏā§āĻāĻŽāĻžāĻāĻāĻĄ āĻāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāϰ āĻā§āώā§āϤā§āϰ⧠āĻ āύā§āĻ āĻĒāĻžāĻā§āĻžāϰāĻĢā§āϞ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻ āĻŦāĻļā§āϝ āĻāĻĒāύāĻžāĻā§ āĻāĻ āĻŦā§āϝāĻžāĻĒāĻžāϰ⧠āϏāĻžāĻŦāϧāĻžāύ āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§, āĻāĻžāϰāύ .gitattributes āĻĢāĻžāĻāϞāĻāĻŋ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻ āĻāĻŽāĻŋāĻ āĻāĻŦāĻ āĻļā§ā§āĻžāϰ āĻšāĻŦā§, āĻāĻŋāύā§āϤ⧠āĻĄā§āϰāĻžāĻāĻāĻžāĻ°Â (`dater`) āĻļā§ā§āĻžāϰ āĻšāĻŦā§ āύāĻž, āϤāĻžāĻ āĻāĻāĻŋ āϏāĻŦ āϝāĻžā§āĻāĻžā§ āĻāĻžāĻ āĻāϰāĻŦā§ āύāĻžāĨ¤ āĻāĻĒāύāĻŋ āϝāĻāύ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻā§āϞ⧠āĻĄāĻŋāĻāĻžāĻāύ āĻāϰāĻŦā§āύ, āĻāĻŽāύ āĻāĻžāĻŦā§ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰāĻŦā§āύ āϝā§āύ āϤāĻž āĻā§āϰā§āϏā§āĻĢā§āϞ āĻĢā§āĻāϞ āĻāϰ⧠āĻāĻŦāĻ āĻĒā§āϰāĻā§āĻā§āĻ āϝā§āύ āĻ āĻŋāĻāĻŽāϤ āĻāĻžāĻ āĻāϰā§āĨ¤
Â
āĻāĻā§āϏāĻĒā§āϰā§āĻ āĻāĻāϰ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ
āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻāϰ āĻāĻā§āϏāĻĒā§āϰā§āĻ āĻāϰāĻžāϰ āϏāĻŽā§ āĻāĻĒāύāĻŋ āĻāĻŋāĻ āĻāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻĻāĻŋā§ā§ āĻāĻŋāĻā§ āĻāύā§āĻāĻžāϰā§āϏā§āĻāĻŋāĻ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
Â
export-ignore
āĻāĻĒāύāĻŋ āĻāĻŋāĻ āĻā§ āĻŦāϞāϤ⧠āĻĒāĻžāϰā§āύ āϝ⧠āϏ⧠āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻāϰā§āĻāĻžāĻāĻ āĻāϰāĻžāϰ āϏāĻŽā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻŋāĻā§ āĻĢāĻžāĻāϞ āĻŦāĻž āĻĢā§āϞā§āĻĄāĻžāϰ āĻāĻā§āϏāĻĒā§āϰā§āĻ āύāĻž āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āĻ āĻĨāĻŦāĻž āĻĢā§āϞā§āĻĄāĻžāϰ āĻāϰā§āĻāĻžāĻāĻ āĻ āϰāĻžāĻāϤ⧠āĻāĻžāύ āύāĻž āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻ checked in āĻāϰ⧠āϰāĻžāĻāϤ⧠āĻāĻžāύ, āĻāĻĒāύāĻŋ āĻāĻāĻž āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ export-ignore āĻāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻĻāĻŋā§ā§āĨ¤
Â
āĻāĻĻāĻžāĻšāϰāĻŖ āϏā§āĻŦāϰā§āĻĒ,āϧāϰā§āύ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āĻā§āĻ āĻāϰ test/ āϏāĻžāĻŦāĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤ⧠āĻāĻŋāĻā§ āĻā§āϏā§āĻ āĻĢāĻžāĻāϞāϏ āĻāĻā§ āĻāĻŋāύā§āϤ⧠āϏā§āĻ āĻĢāĻžāĻāϞ āĻā§āϞ⧠āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āĻā§āĻ āĻāϰ āĻāĻžāϰāĻŦāĻžāϞ āĻāĻā§āϏāĻĒā§āϰā§āĻ āĻ āϰāĻžāĻāĻžāϰ āĻā§āύ āĻĒā§āϰā§ā§āĻāύ āύā§āĻāĨ¤ āĻāĻĒāύāĻŋ āĻāĻ āĻāύā§āϝ āĻāĻĒāύāĻžāϰ āĻāĻŋāĻ āĻāĻā§āϰāĻŋāĻŦāĻŋāĻāĻāϏ āĻĢāĻžāĻāϞ āĻ āύā§āĻā§āϰ āϞāĻžāĻāύ āĻ ā§āϝāĻžāĻĄ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
test/ export-ignore
āĻāĻāύ āĻāĻĒāύāĻŋ āϝāĻāύ git archive āĻĻāĻŋā§ā§ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āĻā§āĻ āĻāϰ āĻāĻžāϰāĻŦāĻžāĻ˛Â āĻā§āϰāĻŋā§ā§āĻ āĻāϰāĻŦā§āύ, āϏā§āĻ āĻĢā§āϞā§āĻĄāĻžāϰ āĻāϰā§āĻāĻžāĻāĻ āĻ āĻĨāĻžāĻāĻŦā§ āύāĻžāĨ¤
Â
export-subst
āϝāĻāύ āĻāĻĒāύāĻŋ āĻĄā§āĻĒā§āϞā§āĻŽā§āύā§āĻ āĻāϰ āĻāύā§āϝ āĻĢāĻžāĻāϞāĻā§āϞ⧠āĻāĻā§āϏāĻĒā§āϰā§āĻ āĻāϰāĻŦā§āύ āϤāĻāĻ¨Â export-subst āĻāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻĻāĻŋā§ā§ āĻŽāĻžāϰā§āĻ āĻāϰāĻž āĻĢāĻžāĻāϞāĻā§āϞāĻŋāϤ⧠git log āĻāϰ āĻĢāϰāĻŽā§āϝāĻžāĻāĻŋāĻ āĻāĻŦāĻ āĻāĻŋ-āĻā§āĻžāϰā§āĻĄ āĻāĻā§āϏāĻĒā§āύāĻļāύ āĻĒā§āϰāϏā§āϏāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
Â
āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āĻā§āĻ āĻ LAST_COMMIT āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āϰāĻžāĻāϤ⧠āĻāĻžāύ, āĻāĻŦāĻ āϝāĻāύ git archive āϰāĻžāύ āĻšāĻŦā§ āϤāĻāύāĻāĻžāϰ āϏāϰā§āĻŦāĻļā§āώ āĻāĻŽāĻŋāĻ āĻāϰ āĻŽā§āĻāĻžāĻĄāĻžāĻāĻž āĻ āĻā§āĻŽā§āĻāĻŋāĻā§āϝāĻžāϞāĻŋ āĻ ā§āϝāĻžāĻĄ āĻāϰāϤ⧠āĻāĻžāύ, āĻāĻĒāύāĻžāϰ .gitattributes āĻāĻŦāĻ LAST_COMMIT āĻāĻĒāύāĻŋ āύā§āĻā§āϰ āĻŽāϤ āĻāϰ⧠āϏā§āĻāĻāĻĒ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
LAST_COMMIT export-subst
$ echo 'Last commit date: $Format:%cd by %aN$' > LAST_COMMIT
$ git add LAST_COMMIT .gitattributes
$ git commit -am 'adding LAST_COMMIT file for archives'
āĻāĻĒāύāĻŋ āϝāĻāύ git archive āϰāĻžāύ āĻāϰāĻŦā§āύ āϤāĻāύ āĻāϰā§āĻāĻžāĻāĻ āĻāϰāĻž āĻĢāĻžāĻāϞ āĻāϰ āĻāύā§āĻā§āύā§āĻ āύā§āĻā§āϰ āĻŽāϤ āĻĻā§āĻāĻžāĻŦā§:
$ git archive HEAD | tar xCf ../deployment-testing -
$ cat ../deployment-testing/LAST_COMMIT
Last commit date: Tue Apr 21 08:38:48 2009 -0700 by Scott Chacon
āĻāĻ āϏāĻžāĻŦāϏā§āĻāĻŋāĻāĻŋāĻāĻļāύ āĻā§āϞ⧠āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ āĻāĻŽāĻŋāĻ āĻŽā§āϏā§āĻ āĻāĻŦāĻ āϝā§āĻā§āύ⧠git notes, āĻāĻŦāĻ git log āĻā§āĻžāϰā§āĻĄ āϰâā§āϝāĻžāĻĒāĻŋāĻ āĻāϰ⧠āĻĻā§āĻāĻžāĻŦā§:
$ echo '$Format:Last commit: %h by %aN at %cd%n%+w(76,6,9)%B$' > LAST_COMMIT
$ git commit -am 'export-subst uses git log'\''s custom formatter
git archive uses git log'\''s `pretty=format:` processor
directly, and strips the surrounding `$Format:` and `$`
markup from the output.
'
$ git archive @ | tar xfO - LAST_COMMIT
Last commit: 312ccc8 by Jim Hill at Fri May 8 09:14:04 2015 -0700
export-subst uses git log's custom formatter
git archive uses git log's `pretty=format:` processor directly, and
strips the surrounding `$Format:` and `$` markup from the output.
āϝ⧠āĻāϰā§āĻāĻžāĻāĻ āĻāĻŋ āϤā§āϰāĻŋ āĻšā§ āϤāĻž āĻĄā§āĻĒā§āϞā§āĻŽā§āύā§āĻ āĻāϰ āĻāύā§āϝ āĻāĻĒāϝā§āĻā§āϤ, āĻāĻŋāύā§āϤ⧠āĻāĻāĻŋ āĻĄā§āĻā§āϞāĻĒāĻŽā§āύā§āĻ āĻāϰ āĻāύā§āϝ āĻāĻĒāϝā§āĻā§āϤ āύā§āĨ¤Â
Â
āĻŽāĻžāϰā§āĻ āϏā§āĻā§āϰā§āĻā§āĻāĻŋāĻÂ
āĻāĻĒāύāĻŋ āĻāĻŋāĻ āĻāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻĻāĻŋā§ā§ āĻāĻŋāĻ āĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĢāĻžāĻāϞ āĻāϰ āĻāύā§āϝ āĻāĻŋāύā§āύ āĻŽāĻžāϰā§āĻ āϏā§āĻā§āϰā§āĻā§āĻāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻŦāϞāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻāĻāĻŋ āĻāĻžāϰā§āϝāĻāϰ āĻ āĻĒāĻļāύ āĻšāϞ āϝā§, āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻŋāĻā§ āĻĢāĻžāĻāϞ āĻ āĻāύāĻĢā§āϞāĻŋāĻā§āĻ āĻšāϞ⧠āĻāĻŋāĻ āϝā§āύ āϏā§āĻ āĻĢāĻžāĻāϞ āĻā§āϞ⧠āĻŽāĻžāϰā§āĻ āύāĻž āĻāϰā§, āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āϏ⧠āϝā§āύ āĻāĻĒāύāĻžāϰ āϏāĻžāĻāĻĄ āĻāϰ āĻŽāĻžāϰā§āĻ āĻāĻž āϏāĻŋāϞā§āĻā§āĻ āĻāϰā§āĨ¤Â
Â
āĻāĻāĻŋ āϏāĻšāĻžāϝāĻŧāĻ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āĻā§āĻā§āϰ āĻāĻāĻāĻŋ āĻŦā§āϰāĻžāĻā§āĻ āĻāϞāĻžāĻĻāĻž āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ āĻŦāĻž āĻŦāĻŋāĻļā§āώāĻžāϝāĻŧāĻŋāϤ āĻšāϝāĻŧ, āϤāĻŦā§ āĻāĻĒāύāĻŋ āĻāĻāĻŋ āĻĨā§āĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋāĻā§ āĻāĻŦāĻžāϰ āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāϤ⧠āϏāĻā§āώāĻŽ āĻšāϤ⧠āĻāĻžāύ āĻāĻŦāĻ āĻāĻĒāύāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāĻā§ āĻāĻāύā§āϰ āĻāϰāϤ⧠āĻāĻžāύāĨ¤ āĻŦāϞā§āύ āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ database.xml āύāĻžāĻŽāĻ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻāĻŋāĻāϏ āĻĢāĻžāĻāϞ āĻāĻā§ āϝāĻž āĻĻā§āĻāĻŋ āĻŦā§āϰāĻžāĻā§āĻā§ āĻāĻŋāύā§āύ, āĻāĻŦāĻ āĻāĻĒāύāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĢāĻžāĻāϞāĻāĻŋ āĻāϞā§āĻŽā§āϞ⧠āύāĻž āĻāϰ⧠āĻāĻĒāύāĻžāϰ āĻ āύā§āϝ āĻŦā§āϰāĻžāĻā§āĻā§ āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāϤ⧠āĻāĻžāύāĨ¤ āĻāĻĒāύāĻŋ āĻāĻ āĻŽāϤ āĻāĻāĻāĻŋ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āϏā§āĻ āĻāĻĒ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:Â
database.xml merge=ours
āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ āĻāĻāĻāĻŋ āĻĄāĻžāĻŽāĻŋ `ours` āĻŽāĻžāϰā§āĻ āϏā§āĻā§āϰā§āĻā§āĻāĻŋ āĻāϰ āϏāĻžāĻĨā§ āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰā§āύ:
And then define a dummy `ours` merge strategy with:
$ git config --global merge.ours.driver true
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ āύā§āϝ āĻŦā§āϰāĻžāĻā§āĻā§ āĻŽāĻžāϰā§āĻ āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠database.xml āĻĢāĻžāĻāϞā§āϰ āϏāĻžāĻĨā§ āĻŽāĻžāϰā§āĻ āĻāύāĻĢā§āϞāĻŋāĻā§āĻāϏ āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤā§, āĻāĻĒāύāĻŋ āĻāϰāĻāĻŽ āĻāĻŋāĻā§ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ:
$ git merge topic
Auto-merging database.xml
Merge made by recursive.
āĻāĻ āĻā§āώā§āϤā§āϰā§, database.xml āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āϝ⧠āĻāĻžāϰā§āϏāύāĻāĻŋ āĻāĻŋāϞ āϏā§āĻāĻžāύā§āĻ āĻĨāĻžāĻāĻŦā§āĨ¤