use disconnected history for import tracking branch
This avoids the first merge from it deleting all files in the current branch, which was very surpring and unwanted behavior.
This commit is contained in:
parent
740f957cef
commit
d28b0a8bd0
4 changed files with 27 additions and 33 deletions
|
@ -247,10 +247,15 @@ seekRemote :: Remote -> Branch -> Maybe TopFilePath -> CommandSeek
|
|||
seekRemote remote branch msubdir = allowConcurrentOutput $ do
|
||||
importtreeconfig <- case msubdir of
|
||||
Nothing -> return ImportTree
|
||||
Just subdir -> frombranch Git.Ref.tree >>= \case
|
||||
Nothing -> giveup $ "Unable to find base tree for branch " ++ fromRef branch
|
||||
Just tree -> pure $ ImportSubTree subdir tree
|
||||
parentcommit <- frombranch Git.Ref.sha
|
||||
Just subdir ->
|
||||
let mk tree = pure $ ImportSubTree subdir tree
|
||||
in fromtrackingbranch Git.Ref.tree >>= \case
|
||||
Just tree -> mk tree
|
||||
Nothing -> inRepo (Git.Ref.tree branch) >>= \case
|
||||
Just tree -> mk tree
|
||||
Nothing -> giveup $ "Unable to find base tree for branch " ++ fromRef branch
|
||||
|
||||
parentcommit <- fromtrackingbranch Git.Ref.sha
|
||||
let importcommitconfig = ImportCommitConfig parentcommit ManualCommit importmessage
|
||||
|
||||
importable <- download importtreeconfig =<< enumerate
|
||||
|
@ -258,12 +263,10 @@ seekRemote remote branch msubdir = allowConcurrentOutput $ do
|
|||
commitRemote remote branch tb parentcommit importtreeconfig importcommitconfig importable
|
||||
where
|
||||
importmessage = "import from " ++ Remote.name remote
|
||||
|
||||
tb = mkRemoteTrackingBranch remote branch
|
||||
-- If the remote tracking branch already exists, get from it,
|
||||
-- otherwise get from the branch.
|
||||
frombranch a = inRepo (a (fromRemoteTrackingBranch tb)) >>= \case
|
||||
Just v -> return (Just v)
|
||||
Nothing -> inRepo (a branch)
|
||||
|
||||
fromtrackingbranch a = inRepo $ a (fromRemoteTrackingBranch tb)
|
||||
|
||||
enumerate = do
|
||||
showStart' "import" (Just (Remote.name remote))
|
||||
|
|
|
@ -43,6 +43,9 @@ paragraph do not apply. Note that dropping content from such a remote is
|
|||
not supported. See individual special remotes' documentation for
|
||||
details of how to enable such versioning.
|
||||
|
||||
You can combine using `git annex export` to send changes to a special
|
||||
remote with `git annex import` to fetch changes from a special remote.
|
||||
|
||||
The `git annex sync --content` command (and the git-annex assistant)
|
||||
can also be used to export a branch to a special remote,
|
||||
updating the special remote whenever the branch is changed.
|
||||
|
|
|
@ -24,7 +24,11 @@ This way, something can be using the special remote for file storage,
|
|||
adding files, modifying files, and deleting files, and you can track those
|
||||
changes using git-annex.
|
||||
|
||||
This can only be used with special remotes that were configured with
|
||||
You can combine using `git annex import` to fetch changes from a special
|
||||
remote with `git annex export` to send your local changes to the special
|
||||
remote.
|
||||
|
||||
You can only import from special remotes that were configured with
|
||||
`importtree=yes` when set up with [[git-annex-initremote]](1). Only some
|
||||
kinds of special remotes will let you configure them this way.
|
||||
|
||||
|
@ -39,7 +43,13 @@ For example:
|
|||
git annex import master --from myremote
|
||||
git merge myremote/master
|
||||
|
||||
It's also posible to limit the import to a subdirectory, using the
|
||||
Note that you may need to pass `--allow-unrelated-histories` the first time
|
||||
you `git merge` from an import. Think of this as the remote being a
|
||||
separate git repository with its own files. If you first
|
||||
`git annex export` files to a remote, and then `git annex import` from it,
|
||||
you won't need that option.
|
||||
|
||||
You can also limit the import to a subdirectory, using the
|
||||
"branch:subdir" syntax. For example, if "camera" is a special remote
|
||||
that accesses a camera, and you want to import those into the photos
|
||||
directory, rather than to the root of your repository:
|
||||
|
@ -47,10 +57,6 @@ directory, rather than to the root of your repository:
|
|||
git annex import master:photos --from camera
|
||||
git merge camera/master
|
||||
|
||||
You can combine using `git annex import` to fetch changes from a special
|
||||
remote with `git annex export` to send your local changes to the special
|
||||
remote.
|
||||
|
||||
The `git annex sync --content` command (and the git-annex assistant)
|
||||
can also be used to import from a special remote.
|
||||
To do this, you need to configure "remote.<name>.annex-tracking-branch"
|
||||
|
|
|
@ -21,24 +21,6 @@ this.
|
|||
* export needs to use storeExportWithContentIdentifierM for importtree=yes
|
||||
remotes
|
||||
|
||||
* Merging the first import from a remote currently removes all local
|
||||
files that are not present in the remote. But subsequent imports from the
|
||||
remote do not delete newly added local files when merged. This seems
|
||||
inconsistent and very surprising to the user.
|
||||
|
||||
It happens because the remote tracking branch currently starts
|
||||
from the local branch, and then has a commit added to it that contains
|
||||
all files in the remote (and thus deletes the local files).
|
||||
A subsequent import extents the tracking branch by another commit, so
|
||||
merging that does not re-do the deletion.
|
||||
|
||||
One fix would be to start the remote tracking branch not with the local
|
||||
branch. Reflecting it being a perhaps entirely separate line of
|
||||
development. Unless git-annex export were used first, and updated the
|
||||
tracking branch, then the branch would start with what's exported, which
|
||||
is fine. The downside of this is that git merge --allow-unrelated-histories
|
||||
is needed to merge that unrelated history.
|
||||
|
||||
* export needs to update the tracking branch with what it exported
|
||||
|
||||
* "git annex import master --from rmt" followed by "git annex import master:sub --from rmt"
|
||||
|
|
Loading…
Reference in a new issue