1
0
mirror of https://github.com/rclone/rclone.git synced 2025-12-06 00:03:32 +00:00

bisync: release from beta

As of v1.71, bisync is officially out of beta.

Some history:

- bisync was born in 2018 as https://github.com/cjnaz/rclonesync-V2
by @cjnaz, written in python.
- In 2021, @ivandeex ported it to go with @cjnaz's support.
https://github.com/rclone/rclone/pull/5164
- It was introduced as an "experimental" feature in v1.58.
6210e22ab5
- In 2023, bisync needed a new maintainer, and @nielash volunteered.
https://forum.rclone.org/t/bisync-bugs-and-feature-requests/37636
- Later in 2023, bisync received a major overhaul and was relabeled "beta"
(from "experimental"). https://github.com/rclone/rclone/pull/7410
- In 2024, integration tests were introduced for bisync (which previously had
only unit tests). https://github.com/rclone/rclone/pull/7693
- As of August 2025, bisync is stable and integration tests are passing on all
of the "flagship" backends.

Development doesn't stop here, of course. But bisync has come a long way since
its "experimental" days, and the "beta" tag is no longer needed.
This commit is contained in:
nielash
2025-08-21 17:54:23 -04:00
committed by Nick Craig-Wood
parent 87d14b000a
commit d4edf8ac18
3 changed files with 60 additions and 24 deletions

View File

@@ -141,7 +141,7 @@ func init() {
flags.BoolVarP(cmdFlags, &tzLocal, "localtime", "", tzLocal, "Use local time in listings (default: UTC)", "")
flags.BoolVarP(cmdFlags, &Opt.NoCleanup, "no-cleanup", "", Opt.NoCleanup, "Retain working files (useful for troubleshooting and testing).", "")
flags.BoolVarP(cmdFlags, &Opt.IgnoreListingChecksum, "ignore-listing-checksum", "", Opt.IgnoreListingChecksum, "Do not use checksums for listings (add --ignore-checksum to additionally skip post-copy checksum checks)", "")
flags.BoolVarP(cmdFlags, &Opt.Resilient, "resilient", "", Opt.Resilient, "Allow future runs to retry after certain less-serious errors, instead of requiring --resync. Use at your own risk!", "")
flags.BoolVarP(cmdFlags, &Opt.Resilient, "resilient", "", Opt.Resilient, "Allow future runs to retry after certain less-serious errors, instead of requiring --resync.", "")
flags.BoolVarP(cmdFlags, &Opt.Recover, "recover", "", Opt.Recover, "Automatically recover from interruptions without requiring --resync.", "")
flags.StringVarP(cmdFlags, &Opt.CompareFlag, "compare", "", Opt.CompareFlag, "Comma-separated list of bisync-specific compare options ex. 'size,modtime,checksum' (default: 'size,modtime')", "")
flags.BoolVarP(cmdFlags, &Opt.Compare.NoSlowHash, "no-slow-hash", "", Opt.Compare.NoSlowHash, "Ignore listing checksums only on backends where they are slow", "")
@@ -163,7 +163,6 @@ var commandDefinition = &cobra.Command{
Annotations: map[string]string{
"versionIntroduced": "v1.58",
"groups": "Filter,Copy,Important",
"status": "Beta",
},
RunE: func(command *cobra.Command, args []string) error {
// NOTE: avoid putting too much handling here, as it won't apply to the rc.
@@ -191,7 +190,6 @@ var commandDefinition = &cobra.Command{
}
}
fs.Logf(nil, "bisync is IN BETA. Don't use in production!")
cmd.Run(false, true, command, func() error {
err := Bisync(ctx, fs1, fs2, &opt)
if err == ErrBisyncAborted {

View File

@@ -35,8 +35,7 @@ var rcHelp = makeHelp(`This takes the following parameters
- removeEmptyDirs - remove empty directories at the final cleanup step
- filtersFile - read filtering patterns from a file
- ignoreListingChecksum - Do not use checksums for listings
- resilient - Allow future runs to retry after certain less-serious errors, instead of requiring resync.
Use at your own risk!
- resilient - Allow future runs to retry after certain less-serious errors, instead of requiring resync.
- workdir - server directory for history files (default: |~/.cache/rclone/bisync|)
- backupdir1 - --backup-dir for Path1. Must be a non-overlapping path on the same remote.
- backupdir2 - --backup-dir for Path2. Must be a non-overlapping path on the same remote.
@@ -56,7 +55,7 @@ On each successive run it will:
Changes include |New|, |Newer|, |Older|, and |Deleted| files.
- Propagate changes on Path1 to Path2, and vice-versa.
Bisync is **in beta** and is considered an **advanced command**, so use with care.
Bisync is considered an **advanced command**, so use with care.
Make sure you have read and understood the entire [manual](https://rclone.org/bisync)
(especially the [Limitations](https://rclone.org/bisync/#limitations) section) before using,
or data loss can result. Questions can be asked in the [Rclone Forum](https://forum.rclone.org/).

View File

@@ -2,12 +2,11 @@
title: "Bisync"
description: "Bidirectional cloud sync solution in rclone"
versionIntroduced: "v1.58"
status: Beta
---
## Bisync
`bisync` is **in beta** and is considered an **advanced command**, so use with care.
`bisync` is considered an **advanced command**, so use with care.
Make sure you have read and understood the entire
[manual](https://rclone.org/bisync) (especially the [Limitations](#limitations)
section) before using, or data loss can result. Questions can be asked in the
@@ -117,7 +116,7 @@ Optional Flags:
--no-slow-hash Ignore listing checksums only on backends where they are slow
--recover Automatically recover from interruptions without requiring --resync.
--remove-empty-dirs Remove ALL empty directories at the final cleanup step.
--resilient Allow future runs to retry after certain less-serious errors, instead of requiring --resync. Use at your own risk!
--resilient Allow future runs to retry after certain less-serious errors, instead of requiring --resync.
-1, --resync Performs the resync run. Equivalent to --resync-mode path1. Consider using --verbose or --dry-run first.
--resync-mode string During resync, prefer the version that is: path1, path2, newer, older, larger, smaller (default: path1 if --resync, otherwise none for no resync.) (default "none")
--retries int Retry operations this many times if they fail (requires --resilient). (default 3)
@@ -740,8 +739,6 @@ See also: [Concurrent modifications](#concurrent-modifications), [`--resilient`]
### --resilient
***Caution: this is an experimental feature. Use at your own risk!***
By default, most errors or interruptions will cause bisync to abort and
require [`--resync`](#resync) to recover. This is a safety feature, to prevent
bisync from running again until a user checks things out. However, in some
@@ -1040,22 +1037,62 @@ expire on its own, if using `--max-lock`.)
### Supported backends
Bisync is considered *BETA* and has been tested with the following backends:
Bisync is integration-tested against all rclone backends to verify compatibility.
Most backends (including all backends not listed below) are deemed fully
supported with no known issues. Occasionally, however, these tests reveal issues
with particular backends, usually related to a provider-specific limitation
beyond rclone's control (for example, disallowed special characters and filename
encodings.)
- Local filesystem
- Google Drive
- Dropbox
- OneDrive
- S3
- SFTP
- Yandex Disk
- Crypt
The following backends have known issues that need more investigation:
It has not been fully tested with other services yet.
If it works, or sorta works, please let us know and we'll update the list.
Run the test suite to check for proper operation as described below.
<!--- start list_failures - DO NOT EDIT THIS SECTION - use rclone gendocs --->
- `TestGoFile` (`gofile`)
- [`TestBisyncRemoteLocal/all_changed`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt)
- [`TestBisyncRemoteLocal/backupdir`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt)
- [`TestBisyncRemoteLocal/basic`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt)
- [`TestBisyncRemoteLocal/changes`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt)
- [`TestBisyncRemoteLocal/check_access`](https://pub.rclone.org/integration-tests/current/gofile-cmd.bisync-TestGoFile-1.txt)
- [78 more](https://pub.rclone.org/integration-tests/current/)
- Updated: 2025-08-21-010015
<!--- end list_failures - DO NOT EDIT THIS SECTION - use rclone gendocs --->
The first release of `rclone bisync` required both underlying backends to support
The following backends either have not been tested recently or have known issues
that are deemed unfixable for the time being:
<!--- start list_ignores - DO NOT EDIT THIS SECTION - use rclone gendocs --->
- `TestCache` (`cache`)
- `TestFileLu` (`filelu`)
- `TestFilesCom` (`filescom`)
- `TestImageKit` (`imagekit`)
- `TestJottacloud` (`jottacloud`)
- `TestLinkbox` (`linkbox`)
- `TestMailru` (`mailru`)
- `TestMega` (`mega`)
- `TestOpenDrive` (`opendrive`)
- `TestOracleObjectStorage` (`oracleobjectstorage`)
- `TestPikPak` (`pikpak`)
- `TestPixeldrain` (`pixeldrain`)
- `TestProtonDrive` (`protondrive`)
- `TestPutio` (`putio`)
- `TestQuatrix` (`quatrix`)
- `TestS3GCS` (`s3`)
- `TestBisyncRemoteRemote/extended_filenames`
- `TestS3Rclone` (`s3`)
- `TestSFTPRsyncNet` (`sftp`)
- `TestStorj` (`storj`)
- `TestWebdavInfiniteScale` (`webdav`)
- `TestWebdavNextcloud` (`webdav`)
- `TestWebdavOwncloud` (`webdav`)
- `TestnStorage` (`netstorage`)
<!--- end list_ignores - DO NOT EDIT THIS SECTION - use rclone gendocs --->
([more info](https://github.com/rclone/rclone/blob/master/fstest/test_all/config.yaml))
The above lists are updated for each stable release of rclone. For test results
updated nightly based on the latest beta, visit rclone's [integration test
status page](https://pub.rclone.org/integration-tests/current/).
Early beta versions of `rclone bisync` required both underlying backends to support
modification times, and refused to run otherwise.
This limitation has been lifted as of `v1.66`, as bisync now supports comparing
checksum and/or size instead of (or in addition to) modtime.
@@ -1861,6 +1898,8 @@ about *Unison* and synchronization in general.
### `v1.71`
- `bisync` is now officially released from beta.
- Fixed an issue causing hash type to be set incorrectly if `path2` had slow
hashes and `--no-slow-hash` or `--slow-hash-sync-only` was in use.