mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 07:08:01 +00:00
Add Exclude A Directory During A Command as a Git TIL
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1637 TILs and counting..._
|
_1638 TILs and counting..._
|
||||||
|
|
||||||
See some of the other learning resources I work on:
|
See some of the other learning resources I work on:
|
||||||
- [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators)
|
- [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators)
|
||||||
@@ -333,6 +333,7 @@ If you've learned something here, support my efforts writing daily TILs by
|
|||||||
- [Dropping Commits With Git Rebase](git/dropping-commits-with-git-rebase.md)
|
- [Dropping Commits With Git Rebase](git/dropping-commits-with-git-rebase.md)
|
||||||
- [Dry Runs in Git](git/dry-runs-in-git.md)
|
- [Dry Runs in Git](git/dry-runs-in-git.md)
|
||||||
- [Exclude A File From A Diff Output](git/exclude-a-file-from-a-diff-output.md)
|
- [Exclude A File From A Diff Output](git/exclude-a-file-from-a-diff-output.md)
|
||||||
|
- [Exclude A Directory During A Command](git/exclude-a-directory-during-a-command.md)
|
||||||
- [Excluding Files Locally](git/excluding-files-locally.md)
|
- [Excluding Files Locally](git/excluding-files-locally.md)
|
||||||
- [Extend Git With Custom Commands](git/extend-git-with-custom-commands.md)
|
- [Extend Git With Custom Commands](git/extend-git-with-custom-commands.md)
|
||||||
- [Files With Local Changes Cannot Be Removed](git/files-with-local-changes-cannot-be-removed.md)
|
- [Files With Local Changes Cannot Be Removed](git/files-with-local-changes-cannot-be-removed.md)
|
||||||
|
|||||||
32
git/exclude-a-directory-during-a-command.md
Normal file
32
git/exclude-a-directory-during-a-command.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Exclude A Directory During A Command
|
||||||
|
|
||||||
|
Many of the git commands we use, such as `git add`, `git restore`, etc., target
|
||||||
|
files and paths relative to the current directory. This is typically exactly
|
||||||
|
what we want, to stage and unstage and so forth the files and directories in
|
||||||
|
front of us.
|
||||||
|
|
||||||
|
I recently ran into a situation where I needed to restore a small subset of
|
||||||
|
changes. At the same time, I had a massive number of auto-generated files
|
||||||
|
recording HTTP interactions (hundreds of files, modified on the working tree).
|
||||||
|
I wanted to run a `git restore`, but wading through all those HTTP recording
|
||||||
|
files was not feasible.
|
||||||
|
|
||||||
|
I needed to exclude those files. They all belonged to a `spec/cassettes`
|
||||||
|
directory. I could exclude them with a _pathspec_ magic signature pattern which
|
||||||
|
is used to alter and limit the paths in a git command.
|
||||||
|
|
||||||
|
A _pathspec_ magic signature is a special pattern made up of a `:` followed by
|
||||||
|
some signature declaring what the pattern means.
|
||||||
|
|
||||||
|
The `(exclude)`, `!`, and `^` magic signatures all mean the same thing —
|
||||||
|
exclude. So, we can exclude a directory from a `git restore` command like so:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git restore --patch -- . ':!spec/cassettes'
|
||||||
|
```
|
||||||
|
|
||||||
|
We've employed two pathspec patterns here. The first, `.`, scopes everything to
|
||||||
|
the current directory. The second, `':!spec/cassettes'` excludes everything in
|
||||||
|
the `spec/cassettes` directory.
|
||||||
|
|
||||||
|
See `man gitglossary` for more on _pathspecs_.
|
||||||
Reference in New Issue
Block a user