Benutzer-Werkzeuge

Webseiten-Werkzeuge


becki:linux:mercurial_tips

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
becki:linux:mercurial_tips [2011-10-05 15:43]
becki
becki:linux:mercurial_tips [2018-05-15 15:49] (aktuell)
becki [Undoing Changes]
Zeile 3: Zeile 3:
  
   * [[svn tips]] --- [[git]] --- [[cvs tips]]   * [[svn tips]] --- [[git]] --- [[cvs tips]]
-  * ''​hg''​ lists basic commands, ''​hg help''​ lists all commands and ''​hg help <​command>''​ shows the help for ''<​command>'' ​+  * ''​hg''​ lists basic commands, ''​hg help''​ lists all commands and ''​hg help <​command>''​ shows the help for ''<​command>''​
   * Infos are scattered over [[hg>​wiki/​UnderstandingMercurial]],​ the [[hg>​wiki/​Tutorial]],​ the [[hg>​guide|Workflow Guide]] and the [[hgbook>​|Hgbook]]   * Infos are scattered over [[hg>​wiki/​UnderstandingMercurial]],​ the [[hg>​wiki/​Tutorial]],​ the [[hg>​guide|Workflow Guide]] and the [[hgbook>​|Hgbook]]
   * [[http://​code.google.com/​p/​support/​wiki/​DVCSAnalysis|Analysis of Git and Mercurial]] by Google   * [[http://​code.google.com/​p/​support/​wiki/​DVCSAnalysis|Analysis of Git and Mercurial]] by Google
Zeile 27: Zeile 27:
   share/​man/​man5/​hgrc.5 ​     # not with 1.8 ?   share/​man/​man5/​hgrc.5 ​     # not with 1.8 ?
   share/​man/​man5/​hgignore.5 ​ # not with 1.8 ?   share/​man/​man5/​hgignore.5 ​ # not with 1.8 ?
-  ​ + 
-[[hg>​wiki/​UnixInstall|See also]] ​ +[[hg>​wiki/​UnixInstall|See also]]
  
 ===== Configuration == ===== Configuration ==
Zeile 39: Zeile 39:
 ; ~/.hgrc ; ~/.hgrc
  
-[extensions] ​+[extensions]
 hgext.graphlog = hgext.graphlog =
-hgext.extdiff =  +hgext.extdiff = 
-  + 
-[extdiff] ​+[extdiff]
 cmd.kdiff = kompare cmd.kdiff = kompare
  
Zeile 105: Zeile 105:
 Bookmarks for often accessed remote repositories can be set in ''​.hgrc''​. Example: Bookmarks for often accessed remote repositories can be set in ''​.hgrc''​. Example:
  
-  alias +  alias
  
 http://​www.selenic.com/​mercurial/​hg.1.html#​urls http://​www.selenic.com/​mercurial/​hg.1.html#​urls
Zeile 122: Zeile 122:
 [[http://​mercurial.selenic.com/​wiki/​QuickStart#​Setting_up_a_new_Mercurial_project|Source]] [[http://​mercurial.selenic.com/​wiki/​QuickStart#​Setting_up_a_new_Mercurial_project|Source]]
  
 +==== Templates and Styles ==
 +
 +Log-like commands can be formatted with froatting strings, wich ar called templates. A style is simply a precanned template. Command to list all installed styles:
 +
 +  hg log --template list
 +
 +Command to incluce phase info into the log:
 +
 +  hg glog --template phases
 +  hg glog -T phases
  
 ==== Converting Repo from CVS == ==== Converting Repo from CVS ==
Zeile 131: Zeile 141:
 ==== Branching == ==== Branching ==
  
-See [[hg>​wiki/​TutorialClone|hg clone]]+Remommendation:​ Use internal branches, i.e. [[hg>​wiki/​Branch|hg branch]] and add a bookmark to each branch. Don't use [[hg>​wiki/​TutorialClone|hg clone]] ​or named branches for branching. 
 + 
 +See alo http://​stevelosh.com/​blog/​2009/​08/​a-guide-to-branching-in-mercurial/​ 
 + 
  
-(Note that there exists also a possibility for internal branches and merges.) 
  
 ==== Merging == ==== Merging ==
Zeile 144: Zeile 157:
  
 This section describes how to create e.g. client-specific variants of the same main project eg. for special needs of customers. This section describes how to create e.g. client-specific variants of the same main project eg. for special needs of customers.
 +
 +FIXME Use [[hg>​wiki/​RebaseExtension]] and fix rest of this section.
  
 === "​Separate what changes"​ Solution == === "​Separate what changes"​ Solution ==
Zeile 194: Zeile 209:
   hg revert <​file1>​ [<​file2>​]   hg revert <​file1>​ [<​file2>​]
  
-Restores the files in the working directory to the state when they had been last commited. Much more options are posssible, see ''​hg help revert''​ [[http://​hgbook.red-bean.com/​read/​finding-and-fixing-mistakes.html#​id391367|Hgbook]] [[http://​mercurial.selenic.com/​wiki/​Revert|Wiki]]+Restores the files in the working directory to the state when they had been last commited. Much more options are posssible, see ''​hg help revert''​ [[http://​hgbook.red-bean.com/​read/​finding-and-fixing-mistakes.html#​id391367|Hgbook]] [[hg>wiki/​Revert|Wiki]]
  
 === Undo latest commit == === Undo latest commit ==
Zeile 202: Zeile 217:
 === Undo an older commit == === Undo an older commit ==
  
-Use ''​hg backout REV''​+Use ''​hg backout REV''​. The old commit is not deleted from history, but reverted as new commit
  
 === Undo more commits than the latest == === Undo more commits than the latest ==
 +
 +''​hg strip''​ (can also be used to remove an older head)
 +
 +Or:
  
 Use ''​clone -r <​revnumber>​ <old> <​new>''​ to create a repo which contains only the changesets until <​revnumber>​. Than throw away the original repo and use the cloned repo. Use ''​clone -r <​revnumber>​ <old> <​new>''​ to create a repo which contains only the changesets until <​revnumber>​. Than throw away the original repo and use the cloned repo.
 +
 +=== History editing ==
 +
 +''​hg histedit''​ e.g. for merging serveral changesets into one. See [[hg>​wiki/​HisteditExtension|Wiki]]
 +
 +Wrong histeds may be reverted by ''​hg unbundle .hg/​strip-backup/<​backupfile>''​. This works for wrong ''​hg rebase''​s as well.
 +==== '​cherry-picking ==
 +
 +Copy changes from other branches onto the current branch: See [[hg>​hg/​help/​graft]]
  
 ==== Queues == ==== Queues ==
Zeile 229: Zeile 257:
 hg qpush -a              # apply all patches to repo hg qpush -a              # apply all patches to repo
 </​code>​ </​code>​
 +
 +===== Collaboration models ==
 +
 +Basically there is [[hgbook>​collaborating-with-other-people.html#​id372641|Pull-only versus shared-push]] collaboration. See also [[hg>​wiki/​WorkingPractices]]
  
 ===== Publishing with Webserver == ===== Publishing with Webserver ==
 +
 +Uncomment or add the following line to ''/​etc/​httpd/​httpd.conf'':​
 +  LoadModule cgi_module lib/​httpd/​modules/​mod_cgi.so
  
 [[hg>​wiki/​PublishingRepositories|Source]] [[hg>​wiki/​PublishingRepositories|Source]]
  
-<​code ​bash+Create file ''/​etc/​mercurial/​webrc''​((name is arbitrary, but it must be mentioned in ''​web.cgi''​ below and it must not be ''​hgrc'',​ because this is the global config file of mercurial)):​ 
-mkdir /etc/mercurial+ 
 +<​code ​ini
 +[collections] 
 +/home/share/​hgroot = /​home/​share/​hgroot 
 + 
 +[web] 
 +allow_archive = gz, zip, bz2 
 +encoding = UTF-8
 </​code>​ </​code>​
  
-Create ​''/​etc/mercurial/hgrc'':​+Copy ''​hgweb.cgi''​ from root dir of the mercurial ​//source//((For Slack, you need to download the source, cause the cgi is missing in default install)) tarball to ''/​var/​www/​cgi-bin/​hgweb''​ and correct the path to the ''​webrc'' ​config file:
  
-  [web] +<​code>​7c7 
-  ​allow_archive ​gz, bz2+< config ​"/​path/​to/​repo/​or/​config"​ 
 +--- 
 +> config = "/​etc/​mercurial/​webrc"​ 
 +</​code>​
  
-Create ​''/​etc/mercurial/hgwebrc'':​+Clone some repositories into ''/​home/share/hgroot'' ​and point browser to ''​http://​localhost/​cgi-bin/​hgweb/''​
  
-  [collections] +===== Working with Git Repositories ==
-  /​home/​share/​hgroot ​/​home/​share/​hgroot+
  
-Copy ''​hgweb.cgi''​ from root dir of mercurial tarball to ''​/var/www/​cgi-bin'',​ optionally rename it to ''​hgweb''​ and make the following edits:+With the [[hg>​wiki/HgGit|HgGit]] extension you can push/pull to/from a remote (or local) Git repo while doing all the work in a local Hg repo. A nice way to get around Git commands ​:-)
  
-<​code>​ +See http://hg-git.github.iofor more info.
-@@ -4,10 +4,13 @@ +
- # ​See also http://mercurial.selenic.com/​wiki/​PublishingRepositories +
-  +
- # Path to repo or hgweb config to serve (see 'hg help hgweb'​) +
--config = "/​path/​to/​repo/​or/​config"​ +
-+config = "/​etc/​mercurial/​hgwebrc"​ +
-  +
- # Uncomment and adjust if Mercurial is not installed system-wide:​ +
--#import sys; sys.path.insert(0, "/path/​to/​python/​lib"​) +
-+import sys; sys.path.insert(0,​ "/​usr/​local/​lib/​python2.5/​site-packages"​) +
-+
-+import os +
-+os.environ["​HGENCODING"​] = "​UTF-8"​ +
-  +
- # Uncomment to send python tracebacks to the browser if an error occurs: +
- #​import cgitb; cgitb.enable() +
-</​code>​+
  
-Clone some repositories into ''​/home/share/hgroot'' ​and point browser ​to ''​http://localhost/cgi-bin/hgweb/''​+==== Install == 
 + 
 +HgGit needs dulwich. Both is available on www.slackbuilds.org 
 + 
 +==== Working with HgGit == 
 + 
 +Local repo (L) is hg, remote repo (R) is git. 
 +We want to push/pull to/from branch master on R 
 + 
 +FIXME Verify: 
 + 
 +  - L needs a (manually created) //bookmark// ''​master''​ which tells HgGit to push to / pull from which branch on R. Checkout if that bookmark must point to tip in order to get pushed all commits! Checkout if the bookmark must be active on L! 
 +  - The //​tag// ​''​default/master''​ is autmatically created and moved on L on every push to pull from R 
 +  - In order to push from L to R, R must not be on the branch to which to L wants to push (see [[git#​push]]) 
 + 
 +See https://​www.mercurial-scm.org/wiki/HgGit 
 +==== Access Github ==
  
-===== Todo ==+To push an existing Mercurial repository to Github: 
 +  - [[https://​help.github.com/​articles/​generating-ssh-keys/​|Import]] your public SSH key to Github 
 +  - [[https://​help.github.com/​articles/​create-a-repo/​|Create]] an empty repo, e.g. ''​foo''​ on Github 
 +  - Cd into your local Hg repo and do <​code>​ 
 +hg bookmark -r default master # make a bookmark of master for default, so a ref gets created 
 +hg push git+ssh://​git@github.com/​becki/​foo.git</​code>​
  
-  * Checkout the export/​import feature: http://​mercurial.selenic.com/​wiki/​TutorialExport 
  
becki/linux/mercurial_tips.1317829413.txt.gz · Zuletzt geändert: 2011-10-05 15:43 von becki

Impressum - Datenschutzerklärung