123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- .. _sharelocal4:
- .. _update:
- Stay up to date
- ---------------
- All of what you have seen about sharing dataset was really
- cool, and for the most part also surprisingly intuitive.
- :dlcmd:`run` commands or file retrieval worked exactly as
- you imagined it to work, and you begin to think that slowly but
- steadily you are getting a feel about how DataLad really works.
- But to be honest, so far, sharing the dataset with DataLad was
- also remarkably unexciting given that you already knew most of
- the dataset magic that your room mate currently is still
- mesmerized about.
- To be honest, you are not yet certain whether
- sharing data with DataLad really improves your life up
- until this point. After all, you could have just copied
- your directory into your ``mock_user`` directory and
- this would have resulted in about the same output, right?
- What we will be looking into now is how shared DataLad
- datasets can be updated.
- Remember that you added some notes on :dlcmd:`clone`,
- :dlcmd:`get`, and :gitannexcmd:`whereis` into the
- original ``DataLad-101``?
- This is a change that is not reflected in your "shared"
- installation in ``../mock_user/DataLad-101``:
- .. runrecord:: _examples/DL-101-119-101
- :workdir: dl-101/mock_user/DataLad-101
- :notes: On updating dataset. How do we get the updated notes from the original dataset?
- :cast: 04_collaboration
- $ # Inside the installed copy, view the last 15 lines of notes.txt
- $ tail notes.txt
- But the original intention of sharing the dataset with
- your room mate was to give him access to your notes.
- How does he get the notes that you have added in the last
- two sections, for example?
- This installed copy of ``DataLad-101`` knows its ``origin``, i.e.,
- the place it was installed from. Using this information,
- it can query the original dataset whether any changes
- happened since the last time it checked, and if so, retrieve and
- integrate them.
- .. index::
- pair: update; DataLad command
- pair: update dataset with remote change; with DataLad
- This is done with the :dlcmd:`update --how merge`
- command.
- .. runrecord:: _examples/DL-101-119-102
- :language: console
- :workdir: dl-101/mock_user/DataLad-101
- :notes: retrieve and integrate changes from origin with datalad update --merge
- :cast: 04_collaboration
- $ datalad update --how merge
- Importantly, run this command either within the specific
- (sub)dataset you are interested in, or provide a path to
- the root of the dataset you are interested in with the
- ``-d``/``--dataset`` flag. If you would run the command
- within the ``longnow`` subdataset, you would query this
- subdatasets' ``origin`` for updates, not the original
- ``DataLad-101`` dataset.
- Let's check the contents in ``notes.txt`` to see whether
- the previously missing changes are now present:
- .. runrecord:: _examples/DL-101-119-103
- :language: console
- :workdir: dl-101/mock_user/DataLad-101
- :notes: let's check whether the updates are there
- :cast: 04_collaboration
- $ # view the last 15 lines of notes.txt
- $ tail notes.txt
- Wohoo, the contents are here!
- Therefore, sharing DataLad datasets by installing them
- enables you to update the datasets content should the
- original datasets' content change -- in only a single
- command. How cool is that?!
- Conclude this section by adding a note about updating a
- dataset to your own ``DataLad-101`` dataset:
- .. runrecord:: _examples/DL-101-119-104
- :language: console
- :workdir: dl-101/mock_user/DataLad-101
- :notes: note in original ds
- :cast: 04_collaboration
- $ # navigate back:
- $ cd ../../DataLad-101
- $ # write the note
- $ cat << EOT >> notes.txt
- To update a shared dataset, run the command "datalad update --how merge".
- This command will query its origin for changes, and integrate the
- changes into the dataset.
- EOT
- .. runrecord:: _examples/DL-101-119-105
- :language: console
- :workdir: dl-101/DataLad-101
- :notes:
- :cast: 04_collaboration
- $ # save the changes
- $ datalad save -m "add note about datalad update"
- PS: You might wonder what a plain :dlcmd:`update` command with no option does.
- If you are a Git-user and know about branches and merging you can read the
- ``Note for Git-users``. However, a thorough explanation
- and demonstration will be in the next section.
- .. index::
- pair: update; DataLad concept
- .. gitusernote:: Update internals
- :dlcmd:`update` is the DataLad equivalent of a :gitcmd:`fetch`,
- :dlcmd:`update --how merge` is the DataLad equivalent of a
- :gitcmd:`pull`.
- Upon a simple :dlcmd:`update`, the remote information
- is available on a branch separate from the main branch
- -- in most cases this will be ``remotes/origin/main``.
- You can :gitcmd:`checkout` this branch or run :gitcmd:`diff` to
- explore the changes and identify potential merge conflicts.
- .. only:: adminmode
- Add a tag at the section end.
- .. runrecord:: _examples/DL-101-119-106
- :language: console
- :workdir: dl-101/DataLad-101
- $ git branch sct_stay_up_to_date
|