Update sparse checkout guide (#14009)

This commit is contained in:
stevenyomi 2022-10-28 21:52:34 +08:00 committed by GitHub
parent 5604629851
commit 151a4ade62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 51 additions and 5 deletions

View File

@ -57,15 +57,47 @@ Some alternative steps can be followed to ignore "repo" branch and skip unrelate
<details><summary>Steps</summary> <details><summary>Steps</summary>
1. Make sure to delete "repo" branch in your fork. You may also want to disable Actions in the repo settings. 1. Make sure to delete "repo" branch in your fork. You may also want to disable Actions in the repo settings.
**Also make sure you are using the latest version of Git as many commands used here are pretty new.**
2. Do a partial clone. 2. Do a partial clone.
```bash ```bash
git clone --filter=blob:none --no-checkout <fork-repo-url> git clone --filter=blob:none --sparse <fork-repo-url>
cd tachiyomi-extensions/ cd tachiyomi-extensions/
``` ```
3. Configure sparse checkout. 3. Configure sparse checkout.
There are two modes of pattern matching. The default is cone (🔺) mode.
Cone mode enables significantly faster pattern matching for big monorepos
and the sparse index feature to make Git commands more responsive.
In this mode, you can only filter by file path, which is less flexible
and might require more work when the project structure changes.
You can skip this code block to use legacy mode if you want easier filters.
It won't be much slower as the repo doesn't have that many files.
To enable cone mode together with sparse index, follow these steps:
```bash
git sparse-checkout set --cone --sparse-index
# add project folders
git sparse-checkout add .run buildSrc core gradle lib multisrc/src/main/java/generator
# add a single source
git sparse-checkout add src/<lang>/<source>
# add a multisrc theme
git sparse-checkout add multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/<source>
git sparse-checkout add multisrc/overrides/<source>
```
To remove a source, open `.git/info/sparse-checkout` and delete the exact
lines you typed when adding it. Don't touch the other auto-generated lines
unless you fully understand how cone mode works, or you might break it.
To use the legacy non-cone mode, follow these steps:
```bash ```bash
# enable sparse checkout # enable sparse checkout
git sparse-checkout set git sparse-checkout set --no-cone
# edit sparse checkout filter # edit sparse checkout filter
vim .git/info/sparse-checkout vim .git/info/sparse-checkout
# alternatively, if you have VS Code installed # alternatively, if you have VS Code installed
@ -85,6 +117,10 @@ Some alternative steps can be followed to ignore "repo" branch and skip unrelate
# or type the source name directly # or type the source name directly
<source> <source>
``` ```
Explanation: the rules are like `gitignore`. We first exclude all sources
while retaining project folders, then add the needed sources back manually.
4. Configure remotes. 4. Configure remotes.
```bash ```bash
# add upstream # add upstream
@ -100,8 +136,6 @@ Some alternative steps can be followed to ignore "repo" branch and skip unrelate
git remote update git remote update
# track master of upstream instead of fork # track master of upstream instead of fork
git branch master -u upstream/master git branch master -u upstream/master
# checkout
git switch master
``` ```
5. Useful configurations. (optional) 5. Useful configurations. (optional)
```bash ```bash
@ -109,10 +143,22 @@ Some alternative steps can be followed to ignore "repo" branch and skip unrelate
git config remote.origin.prune true git config remote.origin.prune true
# fast-forward only when pulling master branch # fast-forward only when pulling master branch
git config pull.ff only git config pull.ff only
# Add an alias to sync master branch without fetching useless blobs.
# If you run `git pull` to fast-forward in a blobless clone like this,
# all blobs (files) in the new commits are still fetched regardless of
# sparse rules, which makes the local repo accumulate unused files.
# Use `git sync-master` to avoid this. Be careful if you have changes
# on master branch, which is not a good practice.
git config alias.sync-master '!git switch master && git fetch upstream && git reset --keep FETCH_HEAD'
``` ```
6. Later, if you change the sparse checkout filter, run `git sparse-checkout reapply`. 6. Later, if you change the sparse checkout filter, run `git sparse-checkout reapply`.
Read more on [partial clone](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/), [sparse checkout](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/) and [negative refspecs](https://github.blog/2020-10-19-git-2-29-released/#user-content-negative-refspecs). Read more on
[Git's object model](https://github.blog/2020-12-17-commits-are-snapshots-not-diffs/),
[partial clone](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/),
[sparse checkout](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/),
[sparse index](https://github.blog/2021-11-10-make-your-monorepo-feel-small-with-gits-sparse-index/),
and [negative refspecs](https://github.blog/2020-10-19-git-2-29-released/#user-content-negative-refspecs).
</details> </details>
## Getting help ## Getting help