Provided by: task_1.9.4-0ubuntu4_i386 bug


       task-sync   -   A   tutorial   for  the  task(1)  data  synchronization


       Taskwarrior has built-in support for synchronization, which can be used
       to keep two task databases up to date, regardless of which one is used.
       This capability can also be used to keep a backup  copy  of  your  task
       database on another machine.

       Taskwarrior can use various protocols for transferring the data.


       If  you were to manually attempt to keep two separate task databases up
       to date, you would need to inspect both databases, and  detect  changes
       that  occurred in each one.  Those changes would need to be migrated to
       the other database, while being careful not to miss a change,  and  not
       to confuse an 'add' in one with a 'delete' in the other.

       The  synchronization  feature  does  just  this.   It can transfer task
       databases, compare tasks, and apply changes where necessary.


       Taskwarrior has 'pull', 'push' and 'merge' commands which  perform  the
       steps  necessary  to move files around and combine them.  In the common
       use case, you would only  need  to  use  the  'merge'  command.   These
       commands  take  an  argument  that  is a URI, which indicates where the
       remote database resides.

       To be clear, the local database always refers to your ~/.task directory
       (unless  overridden),  and  the  remote database is always specified by


       The merge command will fetch task data via URI and combine it with  the
       local task database.  The syntax is:

              task merge [<URI>]

       The  URI is optional if the merge.default.uri configuration variable is
       set.  The URI may point to a  different  directory,  or  it  may  be  a
       different computer.  Here is an example of the merge command:

              $ task merge ~/work/

       This  URI  (~/work/) is a path name, which means the remote database is
       on the same computer.  Taskwarrior will fetch the data  from  the  URI,
       and merge it with your local data in ~/.task.

       When  complete,  you  will  be asked whether you would like to push the
       combined data back to the remote location specified by the  URI.   This
       is  useful  if  you are keeping two task databases synchronized, but it
       can be turned off.  See CONFIGURATION.

       Note that a merge operation is not atomically  reversible.   You  could
       however run the 'task undo' command repeatedly to undo the effects.


       The  push  command  will  copy the local task database to the specified
       URI.  The syntax is:

              task push [<URI>]

       The URI is optional if the push.default.uri configuration  variable  is
       set.   This  command  is  useful  for making backup copies of your task

       Note that the task files at the  location  specified  by  the  URI  are
       simply  overwritten,  so  don't  expect any merging to occur.  Misused,
       push can be dangerous.


       The pull command will copy a task database from a URI to the local task
       database (~/.task by default).  The syntax is:

              task pull [<URI>]

       The  URI  is optional if the pull.default.uri configuration variable is
       set.  This command is useful for restoring a backup copy of  your  task

       Note  that your local task database files will be simply overwritten by
       the files obtained from the location specified by  the  URI,  so  don't
       expect any merging to occur.  Misused, pull can be dangerous.


       The  most  basic  URI  is a path name on the local machine.  An example
       would be:


       All the other URIs allow access to remote machines.  The first uses SSH
       and scp (either form can be used):


       Rsync  is another supported protocol that minimizes network traffic, by
       a clever algorithm that doesn't copy files that have not changed:


       Curl supports several protocols that  can  transfer  data  using  HTTP,
       HTTPS and FTP:


       You  can  use  single  quotes  to  encapsulate  user names that contain
       delimiting characters like '@', '/' or ':', e.g.:


       Remember to escape the quotes on your shell:

              $ task push ftp://┬┤user@name┬┤:host/


       When modifications on  the  local  and  remote  machine  conflict,  for
       example  if  both  machines change the project name of the same task to
       different values,  then  Taskwarrior  automatically  selects  the  most
       recent change.  Thus, there are no conflicts.

EXAMPLE - Backup on another machine

       One  very  good  use  of  'push'  is to make backup copies of your task
       database in another location.  Suppose your task database  is  kept  in
       the  usual  place,  in  the ~/.task directory, and you wanted to make a
       backup copy in ~/backup.  You would use this command:

              $ task push ~/backup/

       This would copy the files in ~/.task to ~/backup, overwriting the files
       that  were  already  in  ~/backup.   To  backup  your  files to another
       machine, you could use:

              $ task push user@host:backup

       This could be improved by setting  the  push.default.uri  configuration
       variable and then relying on the default, like this:

              $ task config push.default.uri user@host:backup

       and then you need only run the push command:

              $ task push

       and  the  default  push  URI  will be used.  If you wanted to restore a
       backup, you simply use the pull command instead:

              $ task pull user@host:backup

       This can be simplified by setting  the  pull.default.uri  configuration
       variable and then relying on the default, like this:

              $ task config pull.default.uri user@host:backup

       Note  that  pull and push will blindly overwrite the task files without
       any merging.  Be careful.

EXAMPLE - Keeping two task databases synchronized

       The most common synchronization will be  to  keep  two  task  databases
       synchronized  on different machines.  Here is a full example, including
       setup that illustrates this.

       Suppose there  are  two  machines,  named  'local'  and  'remote',  for
       simplicity.   Taskwarrior is installed on both machines.  The different
       machines are indicated here by the prompt.  Suppose  Alice  enters  two
       tasks on her local machine:

              local> task add Deliver the new budget proposal due:tuesday
              local> task add Set up a meeting with Bob

       Then later adds a task on the remote machine:

              remote>  task add Present the budget proposal at the big meeting

       Now on the local machine, Alice merges the two task databases:

              local> task merge alice@remote:.task
              Would you like to push the changes to 'alice@remote:.task'?  Y

       Taskwarrior has combined the two task databases on local,  then  pushed
       the changes back to remote.  Now suppose Alice changes the due date for
       task 1 on remote:

              remote> task 1 due:wednesday

       Now on the local machine, Alice sets up a default URI and autopush:

              local> task config merge.default.uri alice@remote:.task
              local> task config merge.autopush yes

       Now Alice can simply run merge to make sure that the new  due  date  is
       copied to the local machine:

              local> task merge

       This  time the URI is determined automatically, and after the merge the
       files are pushed back to the remote machine.  In  a  similar  way,  the
       remote  machine  can also be configured to merge from the local machine
       and push back to it.  Then it is just a matter of Alice remembering  to
       merge  now  and  then, from either machine, to have her data in two (or
       even more) places.


       By setting these configuration variables, it is  possible  to  simplify
       the  synchronization  commands,  by  relying  on  the defaults or alias

              This controls whether  the  automatic  push  after  a  merge  is
              performed,  not  performed,  or  whether the user is asked every
              time.  The default value is 'ask'.

              Sets a default URI so that just the 'task merge' command be  run
              without  the need to retype the URI every time. You can also use
              this  configuration  scheme  to  set  alias  names,   e.g.   set
              merge.desktop.uri and run 'task merge desktop'.

              Sets  a  default URI so that just the 'task push' command be run
              without the need to retype the URI every time. You can also  use
              this   configuration   scheme  to  set  alias  names,  e.g.  set
              push.desktop.uri and run 'task push desktop'.

              Sets a default URI so that just the 'task pull' command  be  run
              without  the need to retype the URI every time. You can also use
              this  configuration  scheme  to  set  alias  names,   e.g.   set
              pull.desktop.uri and run 'task pull desktop'.

       Note  that,  when  using SSH/scp, hostnames will be expanded due to the
       ssh configuration file ~/.ssh/config.


       Depending on the URI protocols used, the utilities 'scp',  'rsync'  and
       'curl'  must  be  installed  and  accessible  via the $PATH environment

       If you have deleted your ~/.task/ file to save space, you will
       be  unable  to  merge.  The change transactions stored in the
       file are used for synchronization.


       task was written by P. Beckingham <>.
       Copyright (C) 2006 - 2011 P. Beckingham, F. Hernandez.

       The sync capabilities were written by J. Schlatow.  Parts copyright (C)
       2010 - 2011 J. Schlatow.

       task   is  distributed  under  the  GNU  General  Public  License.  See for more information.


       task(1),  taskrc(5),  task-faq(5),   task-color(5),   task-tutorial(5),

       For more information regarding task, the following may be referenced:

       The official site at

       The official code repository at

       You can contact the project by writing an email to


       Bugs in task may be reported to the issue-tracker at