我在一个不支持符号链接的文件系统上有一个git和git annex项目。因此,我必须使用一个调整过的分支,这意味着在我的“正常”分支之上,我执行git annex adjust --unlock,以便我得到一个新的分支,在这个分支上,我的附件文件不是附件存储的符号链接,而是原始文件。我的提交树看起来是这样的:
* git-annex adjusted branch (HEAD, adjusted/master(unlocked))
* ┘ some change (master, refs/basis/adjusted/master(unlocked))
* some prior change
...当我现在提交时,我想我会在调整后的分支上这样做,因为git -附件不能使用git annex add MYFILE和git提交创建符号链接:
* my new commit (HEAD, adjusted/master(unlocked))
* git-annex adjusted branch
* ┘ some change (master, refs/basis/adjusted/master(unlocked))
* some prior change我想要的是以标准的git-附件格式提交主分支,这意味着附件文件是指向其在附件存储中位置的符号链接。最后,因为我不能在我的文件系统中签出符号链接,所以我需要自动创建一个新的调整分支,用实际的文件替换提交中的符号链接。
因此,如何从上述情况中得出以下结论:
* git-annex adjusted branch (HEAD, adjusted/master(unlocked))
* ┘ my new commit (master, refs/basis/adjusted/master(unlocked))
│ * git-annex adjusted branch (abandoned previous HEAD)
* ┘ some change
* some prior changegit附件调整上的git附件手册只告诉我如何获得调整过的分支,但没有告诉我如何逆转调整。调整概念页对我来说有点神秘(突出显示文本是我的)。
用户对调整分支的提交必须进行反向调整,才能得到应用于主分支的更改。 一次调整的逆转就像另一次调整一样。因为只有提交所接触的文件才会被反向调整,所以它不需要逆转原来的调整所做的所有更改。当我的文件系统不支持文件时,我该如何从文件反向调整到符号链接呢? 例如,逆转解锁调整可能会锁定文件。或者,它可能什么也不做,这将使所有提交的文件保持未锁定。,他们说“可能什么都不做”是什么意思?什么条件?
发布于 2021-12-16 07:05:11
datalad项目已经编写了函数datalad.support.AnnexRepo.localsync()来完成这一任务。该功能的核心是
def localsync(self,remote=None,managed_only=False):“”合并本地git-附件分支和/或托管分支。此方法调用
git annex sync来执行以下纯本地操作: 1.更新任何托管分支的对应分支。2.对特定或所有遥控器同步本地“git-附件”分支(目前反映在其远程“git-附件”分支的本地状态中)。如果存储库有git-附件的“同步/.”这些分支将被更新。否则,git annex sync创建的此类分支将在同步完成后再次删除。“.”.cmd = 'sync‘cmd.extend( #禁用任何外部交互和其他魔法’-不推送‘,’--不拉‘,’--不提交‘,’--非解析出现‘,‘--无内容’) self.call_annex(cmd) #a sync可以建立新的配置(例如,用于远程的附件-uuid) self.config.reload() #清理同步‘’ed分支,如果不是had_synced_branch和synced_branch在self.get_branches()中:lgr.debug(‘在同步后删除以前不存在的%s分支’,( synced_branch) self.call_git(“分支”,'-d',synced_branch,)
因此,所需的命令似乎是git annex sync --no-push --no-pull --no-commit --no-resolvemerge --no-content。这可能会生成特殊的git附件分支,其名称以“synced/.”开头,它也可能已经存在于以前的同步操作中。因此,如果它们事先不存在,则此函数将删除它们。
https://stackoverflow.com/questions/70364942
复制相似问题