15 Ports and Port Drivers
5 stars based on
A gitattributes file is a simple text file that gives attributes to pathnames. That is, a pattern followed by an attributes list, separated by whitespaces. Leading and trailing whitespaces are ignored.
Lines that begin with are ignored. Patterns that begin with a double quote are quoted in C style. When the pattern matches the path in question, the attributes listed on the line are given to the path. The path has the attribute with special value "true"; this is specified by listing only the name of the attribute in the attribute list.
The path has the attribute with special value "false"; this is specified by listing the name of the attribute prefixed with a dash - in the attribute list. No pattern matches the path, and nothing says if the path has or does not have the attribute, the attribute for the path is said to be Unspecified. When more than one pattern o binary options 3 driver the path, a later line overrides an earlier line. This overriding is done per attribute.
The rules by which the pattern matches paths are the same as in. O binary options 3 driver global and system-wide files are considered they have the lowest precedence. If you wish to affect only a single repository i.
Attributes which should be version-controlled and distributed to other repositories i. Attributes that should affect all repositories for a single o binary options 3 driver should be placed in a file specified by the core.
Sometimes you would need to override a setting of an attribute for a path to Unspecified state. This can be done by listing the name of the attribute prefixed with an exclamation point! Certain operations by Git can be influenced by assigning particular attributes o binary options 3 driver a path. Currently, o binary options 3 driver following operations are attributes-aware. These attributes affect how the contents stored in the repository are copied to the working tree files when commands such as git checkout and git merge run.
They also affect how Git stores the contents you prepare in the working tree in the repository upon git add and git commit. This attribute enables and controls end-of-line normalization. When a text file is normalized, its line endings are converted to LF in the repository.
To control what line ending style is used in the working directory, use the eol attribute for a single file and the core. Setting the text attribute on a path enables end-of-line normalization and marks the path as a text file. End-of-line conversion takes place without guessing the content type. Unsetting the text attribute on a path tells Git not to attempt any end-of-line conversion upon checkin or checkout.
When text is set to "auto", the path is marked for automatic end-of-line conversion. If Git decides that the content is text, its line endings are converted to LF on checkin. When the file has been committed with CRLF, no conversion is done. If the text attribute is unspecified, Git uses the core. This attribute sets a specific line-ending style to be used in the working directory.
It enables end-of-line conversion without any content checks, effectively setting the text attribute. Note that setting this attribute on paths which are in the index with CRLF line endings may make the paths to be considered dirty. Adding the path to the index again will normalize the line endings in the index. This setting forces Git to normalize line endings for this file on checkin and convert them to CRLF when the file is checked out.
While Git normally leaves file contents alone, it can be configured to normalize line endings to LF in the repository and, optionally, to convert them to CRLF when files are checked out. If you simply want to have CRLF line endings in your working directory regardless of the repository you are working with, you can set the config variable "core. This does not force normalization of text files, but does ensure that text files that you introduce to the repository have their line endings normalized to LF when they are added, and that files that are already normalized in the repository stay normalized.
If you want to ensure that text files that any contributor introduces to the repository have their line endings normalized, you can set the text attribute to "auto" for all files. The attributes allow a fine-grained control, how the line endings are converted. Here is an example that will make Git normalize. If any files that should not be normalized show up in git statusunset their text attribute o binary options 3 driver running git add -u. For "true", Git rejects irreversible conversions; for "warn", Git only prints a warning but accepts an irreversible conversion.
The safety triggers to prevent such a conversion done to the files in the work tree, but there are a few exceptions. To catch potential problems early, safety triggers.
A filter o binary options 3 driver can be set to a string value that names a filter driver specified in the configuration. A filter driver consists of a clean command and a smudge command, either of which can be left unspecified.
Upon checkout, when the smudge command is specified, the command is fed the blob object from its standard input, and its standard output is used to update the worktree file. Similarly, the clean o binary options 3 driver is used to convert the contents of worktree file upon checkin.
By default these commands process only a single blob and terminate. If a long running process filter is configured then it always takes precedence over a configured single blob filter. See section below for the description of the protocol used to communicate with a process filter.
One use of the content filtering is to massage the content into a shape that is more convenient for the platform, filesystem, and the user to use. For this mode of operation, the key phrase here is "more convenient" and not "turning something unusable into usable".
In other words, the intent is that if someone unsets the filter driver definition, or does not have the appropriate filter program, the project should still be usable. Another use of the content filtering is to store the content that cannot be directly used in the repository e. These two filters behave differently, and by default, a filter is taken as the former, massaging the contents into more convenient shape. A missing filter driver definition in the config, or a filter driver that exits with a non-zero status, is not an error but makes the filter a no-op passthru.
You can declare that a filter turns a content that by itself is unusable into a usable content by setting the filter. Whenever the clean filter is changed, the repo should be renormalized: Then you would define a "filter.
See the section on merging below. The "indent" filter is well-behaved in this regard: In this case, the lack of a smudge filter means that the clean filter must accept its own output without modifying it. If a filter must succeed in order to make the stored contents usable, you can declare that the filter is requiredin the configuration:. A filter might use this in keyword substitution. Depending on the version that is being filtered, the corresponding file on disk may not exist, or may have o binary options 3 driver contents.
So, smudge and clean commands should not try to access the file on disk, but only act as filters on the content provided to them on standard input.
If the filter command a string value is defined via filter. When Git encounters the first file that needs to be cleaned or smudged, it starts o binary options 3 driver filter and performs the handshake. In the handshake, the welcome message sent by Git is "git-filter-client", only version 2 is suppported, and the supported capabilities are "clean", "smudge", and "delay". The list will contain at least the filter command based on the supported capabilities and the pathname o binary options 3 driver the file to filter relative to the repository root.
Right after the flush packet Git sends the content split in zero or more pkt-line packets and a flush packet to terminate content. Please note, that the filter must not send any response before it received the content and the final flush packet. If the filter does o binary options 3 driver experience problems then the list must contain a "success" status. Right after these packets the filter is expected to send the content in zero or more pkt-line packets and a flush packet at the end.
The filter can change the status in the second list or keep the status as is with an empty list. Please note that the empty list must be terminated with a flush packet regardless. If the result content is empty then the filter is expected o binary options 3 driver respond with a "success" o binary options 3 driver and a flush packet to signal the empty content.
In case the filter cannot or does not want to process the content, it is expected to respond with an "error" status. If the filter experiences an error during processing, then it can send the status "error" after the content was partially or completely sent.
In case the filter cannot or does not want to process the content as well as any future content for the lifetime of the Git process, then it is expected to respond with an "abort" status at any point in the protocol. However, Git sets its exit code according to the filter. If the filter dies during the communication or does not adhere to the protocol then Git will o binary options 3 driver the filter process and restart it with the next file that needs to be processed.
Depending on the filter. If the filter supports the o binary options 3 driver capability, then Git can send the flag "can-delay" after the filter command and pathname. This flag denotes that the filter can delay filtering the current blob e. If Git sends this command, then the filter is expected to return a list of pathnames representing blobs that have been delayed earlier and are now available. The list must be terminated with a flush packet followed by a "success" status that is also terminated with a flush packet.
If no blobs for the delayed paths are available, yet, then the filter is expected to block the response until at least one blob becomes available. The filter can tell Git that it has no more delayed blobs by sending an empty list. As soon as the filter responds with an empty list, Git stops asking. All blobs that Git has not received at this point are considered missing and will result in an error.
After Git received the pathnames, it will request the corresponding blobs again. These requests contain a pathname and an empty content section. The filter is expected to respond with the smudged content in the usual way as explained above.
Please note that you cannot o binary options 3 driver an existing filter.