Git addresses this issue using submodules. Submodules allow you to keep a Git repository as a subdirectory of another Git repository. This lets you clone another repository into your project and keep your commits separate.
One good example of where this is appropriate is the JSON java libary located at https://github.com/stleary/JSON-java which is just the Java source files and not even arranged in a project structure.
To cope with this I used git-sub-modules and built a maven project around it.
Adding the sub-module
To add the sub-module I first created my maven project as normal.Then I created the folder /src/main/java/org/json to contain my link to the other project.
Adding the submodule is then as easy as opening a command prompt on that folder and issuing this command:
git submodule add https://github.com/stleary/JSON-java.gitYou will now have a .gitmodules file in your project.
Add it to your source control to record what you have linked to.
As easy as that!
What are your sub-modules
Later you may not recall where your sub-modules are so from the project route issue this command:git submodule status
This will tell you the folders with sub-modules.
Getting maven to play along!
It is a good idea to ensure that you are using the correct code and that you have any changes in place when building.When you update the project your git client may ask & check sub-modules ... it may not.
So adding the following to your POM.xml ensures that it is added.
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <phase>initialize</phase> <id>git-submodules-init-update</id> <goals><goal>exec</goal></goals> </execution> </executions> <configuration> <executable>git</executable> <arguments> <argument>submodule</argument> <argument>update</argument> <argument>--init</argument> <argument>--recursive</argument> </arguments> </configuration> </plugin>
This causes Maven to execute an executable command.
In this case the sub-module init command which runs maven and initializes the content based on the project's .gitmodules file.
And that is all it takes!
No comments:
Post a Comment