| At the core level, git is character encoding agnostic. | 
 |  | 
 |  - The pathnames recorded in the index and in the tree objects | 
 |  are treated as uninterpreted sequences of non-NUL bytes. | 
 |  What readdir(2) returns are what are recorded and compared | 
 |  with the data git keeps track of, which in turn are expected | 
 |  to be what lstat(2) and creat(2) accepts. There is no such | 
 |  thing as pathname encoding translation. | 
 |  | 
 |  - The contents of the blob objects are uninterpreted sequence | 
 |  of bytes. There is no encoding translation at the core | 
 |  level. | 
 |  | 
 |  - The commit log messages are uninterpreted sequence of non-NUL | 
 |  bytes. | 
 |  | 
 | Although we encourage that the commit log messages are encoded | 
 | in UTF-8, both the core and git Porcelain are designed not to | 
 | force UTF-8 on projects. If all participants of a particular | 
 | project find it more convenient to use legacy encodings, git | 
 | does not forbid it. However, there are a few things to keep in | 
 | mind. | 
 |  | 
 | . `git-commit-tree` (hence, `git-commit` which uses it) issues | 
 |  an warning if the commit log message given to it does not look | 
 |  like a valid UTF-8 string, unless you explicitly say your | 
 |  project uses a legacy encoding. The way to say this is to | 
 |  have i18n.commitencoding in `.git/config` file, like this: | 
 | + | 
 | ------------ | 
 | [i18n] | 
 | commitencoding = ISO-8859-1 | 
 | ------------ | 
 | + | 
 | Commit objects created with the above setting record the value | 
 | of `i18n.commitencoding` in its `encoding` header. This is to | 
 | help other people who look at them later. Lack of this header | 
 | implies that the commit log message is encoded in UTF-8. | 
 |  | 
 | . `git-log`, `git-show` and friends looks at the `encoding` | 
 |  header of a commit object, and tries to re-code the log | 
 |  message into UTF-8 unless otherwise specified. You can | 
 |  specify the desired output encoding with | 
 |  `i18n.logoutputencoding` in `.git/config` file, like this: | 
 | + | 
 | ------------ | 
 | [i18n] | 
 | logoutputencoding = ISO-8859-1 | 
 | ------------ | 
 | + | 
 | If you do not have this configuration variable, the value of | 
 | `i18n.commitencoding` is used instead. | 
 |  | 
 | Note that we deliberately chose not to re-code the commit log | 
 | message when a commit is made to force UTF-8 at the commit | 
 | object level, because re-coding to UTF-8 is not necessarily a | 
 | reversible operation. |