KBI0014: Pushing tags with datalad push#


Michael Hanke <michael.hanke@gmail.com>, Stephan Heunis <jsheunis@gmail.com>




datalad push, tags, git config


datalad_0.18.3, git_2.39.1

The datalad push command makes a saved state of a dataset available to a sibling, both in terms of the dataset’s git repository and its annex. Internally, the command uses git push and git annex copy to push a dataset state to a sibling. Importantly, it honors the configuration of git push by allowing users to specify e.g. what to push, which could include the repository tags. This implies that if the datalad dataset (i.e. git repository) is configured via git config to include tags in the push operation, the datalad push command will result in the tags being pushed to the sibling.

The example code below demonstrates how to configure a dataset’s so-called refspec to include tags, and what the result of datalad push looks like.


First create a demo dataset:

$ datalad create ds

Then create a demo remote repository:

$ mkdir remote
$ git -C remote init --bare

Now we register the remote in the dataset:

$ datalad siblings -d ds add -s origin --url /tmp/push/remote/

And update the dataset’s configuration:

# configure all branches to be pushed by default
$ git -C ds config --add remote.origin.push 'refs/heads/*'
# configure all tags to be pushed by default too
$ git -C ds config --add remote.origin.push 'refs/tags/*'

Finally, we can add a tag to the dataset and test the push operation:

# add a tag to the dataset
$ git -C ds tag mytag
# push
$ datalad push -d ds --to origin
publish(ok): . (dataset) [refs/heads/git-annex->origin:refs/heads/git-annex [new branch]]
publish(ok): . (dataset) [refs/heads/master->origin:refs/heads/master [new branch]]
publish(ok): . (dataset) [refs/tags/mytag->origin:refs/tags/mytag [new tag]]