Local Commits

Use the editor to enter a descriptive message (leave the message blank to abort the commit).
Start with a one-line summary (suitable for use as an email subject line), then leave a blank line, then use free-form paragraph text to describe the change.

Patches

For limited contribution, it is recommended to use the patch approach. See Git/Patches

Pushing

Authorized developers may publish work directly to sf.net/gdcm.git using Git's SSH protocol.

Submodules

In the GDCM.git repository, Testing/Data is not really a directory.
It is a submodule, meaning that its content does not actually appear in GDCM.git, but in the GDCMData.git repository.
In GDCM.git Git stores in the Testing directory an entry called "Data" that refers to a commit from the GDCMData repository.
Indeed, one can see this using a low-level "git ls-tree" command:

This approach allows us to keep the bulky data out of the main repository and version it separately.
Every version of GDCM throughout history refers to the exact version of GDCMData that it needs using this submodule link.

Updating Data

One can think of the Testing/Data entry in GDCM's tree kind of like a file that tells Git which version of GDCMData.git we want.
If we want to change the version of GDCMData.git to which we refer from GDCM (perhaps because we've created a new commit in GDCMData with some updated images), we commit a change to GDCM that updates the Testing/Data "file" to refer to the new version.

Finally, update GDCM to reference the new version of GDCMData.
Our work tree already has the new version checked out in Testing/Data so we just need to tell Git to include this change in the next commit.

$ git add -- Testing/Data

The commit may also include the files edited above to use the new data:

$ git add -- files
$ git commit

Now publish the GDCM commits as you would any other topic.

Hacking socketxx

socketxx is a subtree, this is slightly different from a submodule. socketxx is released under a BSD-style license which is 100% compatible with GDCM.

It was pushed outside of GDCM for a cleaner design. Since socketxx is a subtree, there is absolutely no impact for the user. Having socketxx as a subtree only is an advantage for the developers to cleanly develop against socketxx and only socketxx. socketxx subtree will be merge as bugs or features are implemented.