Free and Open Source real time strategy game with a new take on micro-management

Difference between revisions of "Mercurial"

From Globulation2

Jump to: navigation, search
Line 18: Line 18:


Once you have a cloned repository, you can simply update it with
Once you have a cloned repository, you can simply update it with
:cd glob2
:hg pull -r master http://hg.globulation2.org/glob2/
:hg pull
:cd ../glob2_source
:hg pull -r master ../glob2
:hg update tip
:hg update tip
inside the cloned master directory. This reduces the net traffic drastically.


===Project Member Mercurial Access via HTTPS===
Member access is performed using the Mercurial over HTTPS method. Access can be given by providing [[User:Nct]] with a username and password by emailing him at stephane [at] magnenat [dot] net


===Pushing changes via HTTPS===
This project's Mercurial repository can be checked out through member Mercurial access with the following instruction set:
Member access is performed using the Mercurial over HTTPS method. Access can be given by providing [[User:Nct]] with a username and password by emailing him at stephane [at] magnenat [dot] net.
:hg clone -r master https://hg.globulation2.org/glob2/

When you have commit changes locally (hg commit --message="what you have changed"), you can push the changes to the server using:
:hg push -r branch https://hg.globulation2.org/glob2/

(change "-r branch" to the branch you wish to commit to, example "-r master")


==Mercurial Newbies==
==Mercurial Newbies==

Revision as of 06:55, 29 July 2007

Browsing the Mercurial Repository

You can Browse the Mercurial repository of this project with your web browser. This gives you a good picture of the current status of the source files. You may also view the complete histories of any file in the repository as well as differences among two versions.


Getting a Copy of the Mercurial Repository

Anonymous Mercurial Access

This project's Mercurial repository can be checked out through with the following instruction set:

hg clone http://hg.globulation2.org/glob2/

There is only one glob2 branch which almost always guarantees a functioning glob2. This branch is called "master". So you certainly want to do

hg clone -r master glob2 glob2-master

after the clone command above (and in the same directory you run the previous one).

In the new directory, use:

hg update tip

To bring it to the latest revision

Once you have a cloned repository, you can simply update it with

cd glob2
hg pull
cd ../glob2_source
hg pull -r master ../glob2
hg update tip


Pushing changes via HTTPS

Member access is performed using the Mercurial over HTTPS method. Access can be given by providing User:Nct with a username and password by emailing him at stephane [at] magnenat [dot] net.

When you have commit changes locally (hg commit --message="what you have changed"), you can push the changes to the server using:

hg push -r branch https://hg.globulation2.org/glob2/

(change "-r branch" to the branch you wish to commit to, example "-r master")

Mercurial Newbies

If you've never used Mercurial, you should read some documentation about it; a useful URL is http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart. Using Mercurial is not complex but you have to understand what is going on. The best way to start is to ask a friend to show you the way, or pop onto the glob2 development IRC channel and ask there.

A quick overview of Mercurial

Basically you have to know that there is not total order on a mercurial repository. Each revision exept the initial revision has at least one parent. And different revisions can have the same parent(s). A revision will have more than one parent, if and only if it is a merge of those parents.

If two or more revisions share a parent, we have infact different branches in the repository. The new mercurial feature allows to give a revision a sticky tag that is past to almost all its children. Exeptions are merges. If you merge branch A into branch B, this revision will belong to branch B. So when you merge the master branch into a development branch, the result will belong to the development branch. This is good because you can keep track of approved changes, during your development now and then.

Branches don't have names, unless you give them a name. I don't know whether the names have to be unique. So multiple branches were supported all the time. The new feature just allows to name them. You can put the branchname everywhere you can put a revision number. So all commands that have '-r' or '-rev' option accept a branchname too. Mercurial will then search the latest revision in that branch and path its number to the command. (At least that's what I think it does.)

If every branch (named or not) has the same "latest revision", our repository will have exactly 1 head. Otherwise we will have more heads and mercurial will suppose that we merge the heads. But most of the time this would be inappropriate, and we shouldn't do it.

The latest revision is always called tip, and mercurial defaults to think that we want to work on it. This is also very sad, if it does belong to an other branch. I really recomment that you only pull the branch you want to use. You can do this, because the clone and pull commands have a '-r' option. I pull the whole repository on my computer and than pull the branches that I want to work on, from that local repository to different working repositories. I suggest everyone should do this. So there is one incoming repository, one or more working repository and one outgoing repository locally on my computer.

Our master branch I called "master". But the first twothousendsomething revisions of that branch have no name.

Glob2 players should always pull the master branch. Unfortunately we can't force them.

You can try everything mercurial locally before pushing to the remote repository.

"hg log", "hg diff", "hg branch", "hg heads", "hg incoming", "hg outgoing" and "hg status" are very helpfull. Oh, and "hg help" and "hg help <command>" too.

Please look into the extentions.
"hg view" is very good for an graphical overview of the repository structure, though it seems not to display the branch names. And you definetly have to set up a merge tool for those case when you have to merge manually.

Branching of should look like this:

In case you don't want to branch from the tip of your local repository:
"hg revert --all -r <revision from which you want to branch of>"
"hg branch <branchname>"
"hg commit"
done.

Cloning from a branch:
"hg clone -r <branchname> <location of the repository> <name that you want your repository to have>"
Pulling from a branch:
"hg pull -r <branchname> <location of the repository>"


Older source code

For revisions and branches older than the new Mercurial setup, visit CVS. This code could be quite old by the time you read this, so its advised that you use the latest code instead.

Misc