update
This commit is contained in:
parent
e4c85c856b
commit
3188e5e4fe
1 changed files with 47 additions and 3 deletions
|
@ -9,6 +9,10 @@ Consider two use cases:
|
||||||
Both of these could be met by making `git-annex sync` maintain an adjusted
|
Both of these could be met by making `git-annex sync` maintain an adjusted
|
||||||
version of the original branch, eg `adjusted/master`.
|
version of the original branch, eg `adjusted/master`.
|
||||||
|
|
||||||
|
[Alternatively, it could stay on the master branch, and only adjust the
|
||||||
|
work tree and index. See WORKTREE notes below for how this choice would
|
||||||
|
play out.]
|
||||||
|
|
||||||
[[!toc]]
|
[[!toc]]
|
||||||
|
|
||||||
## filters
|
## filters
|
||||||
|
@ -32,6 +36,11 @@ Since the adjusted/master branch is not present on the remote, if the user
|
||||||
does a `git pull`, it won't merge in changes from origin/master. Which is
|
does a `git pull`, it won't merge in changes from origin/master. Which is
|
||||||
good because the filter needs to be applied first.
|
good because the filter needs to be applied first.
|
||||||
|
|
||||||
|
[WORKTREE: `git pull` would update the work tree, and may lead to conflicts
|
||||||
|
between the adjusted work tree and pulled changes. A post-merge hook would
|
||||||
|
be needed to re-adjust the work tree, and there would be a window where eg,
|
||||||
|
not present files would appear in the work tree.]
|
||||||
|
|
||||||
However, if the user does `git merge origin/master`, they'll get into a
|
However, if the user does `git merge origin/master`, they'll get into a
|
||||||
state where the filter has not been applied. The post-merge hook could be
|
state where the filter has not been applied. The post-merge hook could be
|
||||||
used to clean up after that. Or, let the user foot-shoot this way; they can
|
used to clean up after that. Or, let the user foot-shoot this way; they can
|
||||||
|
@ -45,6 +54,11 @@ missing file filter would cause it to be removed from the adjusted branch,
|
||||||
and receiving a file's content would cause it to appear in the adjusted
|
and receiving a file's content would cause it to appear in the adjusted
|
||||||
branch.
|
branch.
|
||||||
|
|
||||||
|
These changes would need to be committed to the adjusted branch, otherwise
|
||||||
|
`git diff` would show them.
|
||||||
|
|
||||||
|
[WORKTREE: Simply adjust the work tree (and index) per the filter.]
|
||||||
|
|
||||||
## commit
|
## commit
|
||||||
|
|
||||||
When committing changes, a commit is made as usual to the adjusted branch.
|
When committing changes, a commit is made as usual to the adjusted branch.
|
||||||
|
@ -69,7 +83,8 @@ So, the branches would look like this:
|
||||||
| B''
|
| B''
|
||||||
|
|
||||||
Note particularly that B does not have A' in its history; the adjusted
|
Note particularly that B does not have A' in its history; the adjusted
|
||||||
branch is not evident from outside.
|
branch is not evident from outside. So, we need a way to detect commits
|
||||||
|
like A'.
|
||||||
|
|
||||||
Also note that B gets merged back to the adjusted branch, re-applying the
|
Also note that B gets merged back to the adjusted branch, re-applying the
|
||||||
filter. This will make other checkouts that are in the same adjusted branch
|
filter. This will make other checkouts that are in the same adjusted branch
|
||||||
|
@ -79,6 +94,10 @@ It might be useful to have a post-commit hook that generates the
|
||||||
reverse-filtered commit and updates the original branch. And/or
|
reverse-filtered commit and updates the original branch. And/or
|
||||||
`git-annex sync` could do it.
|
`git-annex sync` could do it.
|
||||||
|
|
||||||
|
[WORKTREE: A pre-commit hook would be needed to update the staged changes,
|
||||||
|
reversing the filter before the commit is made. All the other complications
|
||||||
|
above are avoided.]
|
||||||
|
|
||||||
## reverse filtering
|
## reverse filtering
|
||||||
|
|
||||||
Reversing filter #1 would mean only converting pointer files to
|
Reversing filter #1 would mean only converting pointer files to
|
||||||
|
@ -105,6 +124,26 @@ adjusted/master won't push anything. It would with "matching". Pity. (I
|
||||||
continue to feel git picked the wrong default here.) Users may find that
|
continue to feel git picked the wrong default here.) Users may find that
|
||||||
surprising. Users of `git-annex sync` won't need to worry about it though.
|
surprising. Users of `git-annex sync` won't need to worry about it though.
|
||||||
|
|
||||||
|
[WORKTREE: push works as usual]
|
||||||
|
|
||||||
|
## acting on filtered-out files
|
||||||
|
|
||||||
|
If a file is filtered out due to not existing, there should be a way
|
||||||
|
for `git annex get` to get it. Since the filtered out file is not in the
|
||||||
|
index, that would not normally work. What to do?
|
||||||
|
|
||||||
|
Maybe instead of making a branch where the file is deleted, it would be
|
||||||
|
better to delete it from the work tree, but keep the branch as-is. Then
|
||||||
|
`git annex get` would see the file, as it's in the index.
|
||||||
|
|
||||||
|
But, not maintaining an adjusted branch complicates other things. See
|
||||||
|
WORKTREE notes throughout this page. Overall, the WORKTREE approach seems
|
||||||
|
too problimatic.
|
||||||
|
|
||||||
|
Ah, but we know that when filter #2 is in place, any file that `git annex
|
||||||
|
get` could act on is not in the index. So, it could look at the master branch
|
||||||
|
instead. (Same for `git annex move --from` and `git annex copy --from`)
|
||||||
|
|
||||||
## problems
|
## problems
|
||||||
|
|
||||||
Using `git checkout` when in an adjusted branch is problimatic, because a
|
Using `git checkout` when in an adjusted branch is problimatic, because a
|
||||||
|
@ -113,10 +152,12 @@ you want to get into an adjusted branch, you have to run some command.
|
||||||
Or, could make a post-checkout hook.
|
Or, could make a post-checkout hook.
|
||||||
|
|
||||||
Tags are bit of a problem. If the user tags an ajusted branch, the tag
|
Tags are bit of a problem. If the user tags an ajusted branch, the tag
|
||||||
includes the local adjustments.
|
includes the local adjustments.
|
||||||
|
[WORKTREE: not a problem]
|
||||||
|
|
||||||
If the user refers to commit shas (in, eg commit messages), those won't be
|
If the user refers to commit shas (in, eg commit messages), those won't be
|
||||||
visible to anyone else.
|
visible to anyone else.
|
||||||
|
[WORKTREE: not a problem]
|
||||||
|
|
||||||
## integration with view branches
|
## integration with view branches
|
||||||
|
|
||||||
|
@ -127,3 +168,6 @@ Could go a step further, and implement view branches as another branch
|
||||||
adjusting filter, albeit an extreme one. This might improve view branches.
|
adjusting filter, albeit an extreme one. This might improve view branches.
|
||||||
For example, it's not currently possible to update a view branch with
|
For example, it's not currently possible to update a view branch with
|
||||||
changes fetched from a remote, and this could get us there.
|
changes fetched from a remote, and this could get us there.
|
||||||
|
|
||||||
|
[WORKTREE: Wouldn't be able to integrate, unless view branches are changed
|
||||||
|
into adjusted view worktrees.]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue