Retrieve module from the Git repository
In this example we look at how to check out the STK module from the Git repository.
- Go top http://git.magnolia-cms.com.
- Search for "standard-templating-kit" with the search tool.
- On the results, click modules/standard-templating-kit.git. The project summary is loaded.
- Copy the anonymous, read-only URL.
- Go to the command line and change to the directory where you would like to have your copy of the Standard Templating Kit project.
- Type
git clone
and paste in the URL. The complete command should will look like this:git clone http://git.magnolia-cms.com/git/modules/standard-templating-kit.git
.
Locate module Version
On the project summary on Gitweb site, under the "tags" section, look for the version tag you are interested in (2.0.3 in our example).
If the tag does not show up in the short list, click on "..." at the bottom of the list to reveal the full tag list of this project. Click on the standard-templating-kit-2.0.3 tag. This will give you the details of this 2.0.3-commit
Alternatively, git tag -l
will list the tags in your terminal.
Once you know which tag you want, change into the standard-templating-kit
directory created by our git clone
command above and set the clone back to the desired version using the following command:
git checkout <tag name>
For more details, see the Git usage page.
9 Comments
Natascha Desmarais
Regarding your question about the
reset --hard
, you could also simply usegit checkout <tag name>
(so in this case:git checkout standard-templating-kit-2.0.3
). However, this results in a detached head, which is really nothing to worry about if you're just trying to look around in the files.You could also create a new branch from that specific tag if you actually want to fiddle around with it. You can use
git checkout -b newbranchname standard-templating-kit-2.0.3
for that. This avoids the detached HEAD from the simple tag checkout.reset
basically just resets your HEAD and index to the specified version without taking care of the working files (unless you use--hard
), whilecheckout
is more about the working files (that's why you end up with a detached HEAD in the end).So for the sake of what they do and since you're interested in the files more than the rest of the history, I would use the
checkout
command for that.Richard Unger
Thanks for that, Will!
I've been working on migrating our stuff to 4.5, and the move to Git has been giving me headaches too.
I'm using the Eclipse EGit plugin, but the procedure is more or less the same. It seems to be a bit easier to browse the tags in EGit, you don't need to mess around with the commit hashes.
But I can't believe that this is the only way to do this. That's horrible useabilty compared to SVN - why would anyone switch to git, I wonder??
@Magnolia: really what is missing is a simple way to browse *all* the projects like in SVN, and select individual ones for checkout. Is there no way you can set up your repository so that everything is rooted at one point?
Richard
Magnolia International
Not sure what you mean, Richard. Gitweb provides such a flat list, and it's more-or-less duplicated here in the wiki. Or do you mean a way to browse existing repos from EGit ?
As for reasons for the move, there are many. For me, the main two are
That said, we know it IS hard to switch yourself. Really different mindset. Maybe check these links out:
It will require some commitment on everyone's part, and I get the feeling from your and a couple of other messages that perhaps we haven't been upfront enough about the move ? In any case, I would advise everyone to try and get familiar with Git with smaller projects, on their own. You don't need a server or anything to get started. In fact, I've started using Git on small projects that currently reside nowhere else than on my laptop, or in some case are still on SVN; I use Git locally before committing larger chunks of work to SVN.
git init
is all you need !Richard Unger
Hi Greg,
I've been following the move to Git, but this was my first hands-on experience... so I think its just a case of getting used to it.
So far in my use of Git I've always been able to check out everything I need with a single clone command - smaller projects, I guess.
You are of course correct that everything is more or less nicely indexed online - I have the page https://git.magnolia-cms.com/gitweb/ permanently open at the moment.
However, I have not found a way to browse the entire repo with EGit - and that's really what I was complaining about. Magnolia is a big project, and all the modules are split up as many individual Git-Repos. To get everything I need, I have to do many clone operations, each of which involves many "clicks" (or command-line calls, doesn't matter). With SVN, I could browse the whole structure, control-click 17 projects, and check them all out at the same time. Much less work.
Now the workflow is more like:
So I'm not totally happly with this workflow, but I don't really have a problem with Git itself. I do understand the advantages...
Anyway, I'm still learning, and I am sure that I'll find a good way to do all this eventually.
Regards from Vienna,
Richard
Magnolia International
You might want to look into Git "modules", that might help.
Richard Unger
Hi,
Yes that looks like the right thing: http://git-scm.com/book/en/Git-Tools-Submodules
If I read this correctly, it would mean that someone (preferably not me
) could prepare a "meta-project", something like "magnolia-ce-all" and/or "magnolia-ee-all". Within this meta-repository, one would add all the individual git-repos for the various magnolia projects as "submodules". Each submodule would have a directory within the main project.
After cloning the main project, you would initially just get a set of empty directories. A call to "git submodule update" would fetch all the subprojects in one go, or you could change into specific directories and update them individually.
Even better, if I understand the documentation correctly, the submodules are linked to specific versions of their projects. So a given version of the main project will include each of its submodules at a given version number. That's really perfect, since this means that (for example) version 4.5.3 of the main project can directly refer to the various versions of the sub-projects that make up magnolia 4.5.3.
IMHO setting this up would be a good thing, if I've understood everything correctly...
Regards from Vienna,
Richard
Magnolia International
And the cool thing is, you can do this on your own machine (
git init
to create a new repo), you don't need to push/clone it to/from anyway to get started. If it works well though, I'll be happy to let you push that on our server !Sven Damm
Has anybody created these meta projects yet?
Magnolia International
In the case of STK, the cloning is long, not because it "clones all versions" (tags and branches are cheap in Git, they hardly add anything to the size of the repo), but because it clones all files that ever existed in the repo at some point. Unluckily, the STK repo contained, in its early stages, large images which were later moved somewhere else.
Try the same with another module, dms for example, and I'm ready to bet just cloning the repo will be faster than checking out just one branch off of svn