Please describe the problem.
Identically configured remotes behave differently in the "git annex push" command after "git annex sync" to only one of them.
What steps will reproduce the problem?
I have a repository on Linux and two USB backup sticks, all Ext4 file system. At one point I accidentally did "git annex sync music-backup-one".
When I now "git annex push music-backup-two" it works as expected and I see the correct files on the stick and "git annex list" shows the content correctly. This is not true for "git annex push music-backup-one" as I must also issue "git annex mirror . --to=music-backup-one" for the content and "git annex list" to be correct (both commands are required in either order).
How do I diagnose the problem so push works without the need for mirror on music-backup-one?
During my investigation, I noticed the filemode (executable) bit for annexed files is not transferred to either USB drive if that is the only change (perhaps a separate issue).
What version of git-annex are you using? On what operating system?
10.20231130-g0e9bc415882a5e3a285e004cf9f80936e5762a07
Please provide any additional information below.
# If you can, paste a complete transcript of the problem occurring here.
# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
All three repos have:
'annex.largefiles' set to 'mimeencoding=binary',
'group' set to 'manual'
'wanted' set to 'standard' and
'numcopies' set to 3.
desktop-music has adjust option --unlock and the two backups have option --lock.
Here is the contents of .git/config for desktop-music:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[annex]
uuid = 0045d866-c80e-43c1-9b1b-b15a8c97c1aa
version = 10
adjustedbranchrefresh = true
[filter "annex"]
smudge = git-annex smudge -- %f
clean = git-annex smudge --clean -- %f
process = git-annex filter-process
[push]
followTags = true
[receive]
denyCurrentBranch = updateInstead
[remote "music-backup-one"]
url = /media/juanito/music-backup-one/music-library
fetch = +refs/heads/*:refs/remotes/music-backup-one/*
annex-uuid = 0b439b9f-16c7-4945-8cb2-9d6084677af3
[remote "music-backup-two"]
url = /media/juanito/music-backup-two/music-library
fetch = +refs/heads/*:refs/remotes/music-backup-two/*
annex-uuid = 74a6b33c-fea2-45ef-a0c5-b677b43bc85f
[remote "github"]
url = git@github.com:not-for-you.git
fetch = +refs/heads/*:refs/remotes/github/*
annex-ignore = true
[remote "itunes-media"]
annex-directory = /home/juanito/annex-remotes/itunes-media
annex-uuid = e18dbc8e-8e0f-47f2-8f33-e8eb9da97a62
skipFetchAll = true
annex-tracking-branch = main:Music
[remote "linux-media"]
annex-directory = /home/juanito/annex-remotes/linux-media
annex-uuid = b4efca25-5be6-4ea5-b0f9-207770abf21b
skipFetchAll = true
annex-tracking-branch = main:Music
Here is the contents of .git/config for music-backup-one:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "desktop-music"]
url = /home/juanito/git/music-library
fetch = +refs/heads/*:refs/remotes/desktop-music/*
annex-uuid = 0045d866-c80e-43c1-9b1b-b15a8c97c1aa
[branch "adjusted/main(unlocked)"]
remote = desktop-music
merge = refs/heads/adjusted/main(unlocked)
[annex]
uuid = 0b439b9f-16c7-4945-8cb2-9d6084677af3
version = 10
adjustedbranchrefresh = true
[filter "annex"]
smudge = git-annex smudge -- %f
clean = git-annex smudge --clean -- %f
process = git-annex filter-process
[push]
followTags = true
[receive]
denyCurrentBranch = updateInstead
Here is the contents of .git/config for music-backup-two:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "desktop-music"]
url = /home/juanito/git/music-library
fetch = +refs/heads/*:refs/remotes/desktop-music/*
annex-uuid = 0045d866-c80e-43c1-9b1b-b15a8c97c1aa
[branch "adjusted/main(unlocked)"]
remote = desktop-music
merge = refs/heads/adjusted/main(unlocked)
[annex]
uuid = 74a6b33c-fea2-45ef-a0c5-b677b43bc85f
version = 10
adjustedbranchrefresh = true
[filter "annex"]
smudge = git-annex smudge -- %f
clean = git-annex smudge --clean -- %f
process = git-annex filter-process
[push]
followTags = true
[receive]
denyCurrentBranch = updateInstead
# End of transcript or log.
I have attached a script and log file demonstrating the problem. The script:
1) sets up an integration repository and two backup repositories each containing one file.
2) adds another file to the integration repository, pushes it to both backups, and does a
git annex list
which shows correctly.3) does a
git annex sync music-backup-one
to introduce the problem.4) adds another file to the integration repository, pushes it to both backups, and does a
git annex list
which shows the file missing frommusic-backup-one
.5) does
git annex mirror . --to=music-backup-one
then anothergit annex list
which shows the files as expected.If the sync command is commented out, the last two lines are unnecessary. The sync command should not change the behavior of other commands.
Here's the log file: