zoukankan      html  css  js  c++  java
  • hg和git命令对照表

    hg和git命令对照表

    来源 https://github.com/sympy/sympy/wiki/Git-hg-rosetta-stone

    Git hg rosetta stone

     
    muxator edited this page on 10 Mar 2017 · 50 revisions

    The sympy git server is at https://github.com/sympy/sympy . The main Sympy repository may be cloned with git clone git://github.com/sympy/sympy.git.

    The first and the most important thing is that you should understand that git is different. For example it uses staging area (so called index) for iteratively preparing commits. This and other great and unique features of git make it the preference of many developers, so go read its documentation!

    Here is a nice cheatsheet which will probably make your life easier in the beginning: https://jan-krueger.net/development/git-cheat-sheet-extended-edition

    Being said all this, now comes a simplified mapping between hg commands and git commands. Use it with care -- there are some semantic differences ...


    If you know how to use hg very well and just looking at how to do the same things in git, this page is right for you. Use it like a dictionary hg -> git. Some equivalent git commands may seem more complex than the corresponding hg counterparts; that's because the natural flow of work in git doesn't map 1:1 to Mercurial. But the point here is that if you are used to some specific workflow in hg, it can be directly translated to git using the table below and it does exactly the same thing as you are expecting it to.

    When editing this wiki page, please only add an exact equivalent to some hg command; a full explanation can always be found somewhere else on the net.

    Table of Contents

    Rosetta Stone

    hggit
    hg cat -r rev some_file git show rev:some_file
    hg clone http://hg.sympy.org/sympy-git.hg git clone git://git.sympy.org/sympy.git
    hg clone -U http://hg.sympy.org/sympy-git.hg git clone --bare git://git.sympy.org/sympy.git
    hg diff git diff HEAD
    hg diff -r A -r B git diff A^..B
    hg status git status
    hg status -c git ls-files -t | grep '^H'
    hg manifest git ls-tree -r --name-only --full-tree HEAD
    hg parents git show --pretty=format:'%P' -s
    hg commit git commit -a
    hg record git add -p; git commit # or, for a more detailed interface: git add -i; git commit
    hg email -r tip git send-email HEAD^ # or: git format-patch HEAD^ ; git send-email 0001-Add-whitespace.patch
    hg view gitk, git gui
    hg help command git help command
    ~/.hgrc ~/.gitconfig
    .hg/hgrc .git/config
    hg paths git remote -v
    editing paths in .hg/hgrc git remote add name url # see "git help remote" for more info how to edit paths; alternatively, you can edit them by hand in .git/config too
    .hgignore .gitignore
    .hg/hgrc [ui] ignore .git/info/exclude
    hg add git add (note, it adds _content_ to index; can work on a hunk-by-hunk basis with -p!)
    hg rm git rm
    hg push git push
    hg pull git fetch
    hg pull -u git pull
    hg addremove git add -A (or: git add .; git ls-files --deleted xargs git rm)
    hg revert -a git reset --hard
    hg revert some_file git checkout some_file
    hg purge git clean -fd
    hg purge --all git clean -fdx
    hg strip 2fccd4c git reset --hard 2fccd4c^ (on a normal repository)
    git reset --soft 2fccd4c^ (on a bare repository)
    hg forget git rm --cached (reference: stackoverflow)
    hg export git format-patch
    hg import --no-commit some.patch git apply some.patch
    hg import some.patch git am some.patch
    hg out git fetch && git log origin/master..
    hg in git fetch && git log ..origin/master
    hg update tip git checkout HEAD # or this: "git checkout master", or "git merge FETCH_HEAD", depending on what you did before this
    hg update -C git checkout -f
    hg update some.branch git checkout some.branch # Note that "git branch some.branch" is not the same as this.
    hg up --date 2014-01-01 git checkout `git rev-list -n 1 --before="2014-01-01" master`
    hg qimport stg something (A separate patch manager extension is probably not necessary in git -- normal workflow combined with git rebase -i should cover your needs)
    hg qpush (see hg qimport)
    hg qpop (see hg qimport)
    hg qimport -r tip ?
    hg qnew -f some.patch ?
    hg resolve -a -m git add -u
    hg root git rev-parse --show-toplevel
    hg log -G (old way: hg glog) git log --graph --all --decorate # or: git log --graph --all;
    hg verify git fsck
    hg branches git branch -a
    hg branch git rev-parse --abbrev-ref HEAD
    hg rollback git reset HEAD~
    hg backout git revert

    Setup

    ~/.hgrc:

     [ui]
     username = Ondrej Certik <ondrej@certik.cz>
    

    ~/.gitconfig:

     [user]
         name = Ondrej Certik
         email = ondrej@certik.cz
    
     [color]
         ui = auto
    
     [color]
         decorate = short
    
     [alias]
         ci = commit
         di = diff --color-words
         st = status
    
         # aliases that match the hg in / out commands
         out      = !git fetch && git log FETCH_HEAD..
         outgoing = !git fetch && git log FETCH_HEAD..
         in       = !git fetch && git log ..FETCH_HEAD
         incoming = !git fetch && git log ..FETCH_HEAD
    
    

    More Information

    One can find some info here:

    and at many other pages.

    Tips

     - use gitk to visualize history (much more capable than "hg vi")
     - use git gui to visually stage/unstage what you are preparing for commit
       to index (it too can work on hunk-by-hunk basis)
     - git stash is your friend
     - git rebase --interactive is your friend too :)
     - windows users: either use cygwin or msysgit:
       https://code.google.com/p/msysgit/
    
     - don't try to project your usual habits - open your mind, and maybe you'll
       discover much more superior workflow. (yes, this needs hard work and RTFM,
       and being ready that FM sometimes differ from what software actually does)
     - Add this
    
     parse_git_branch() {
       git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* (.*)/(1)/'
       # __git_ps1 "(%s)"
       # use the second line instead if you have bash autocompletion for git enabled
     }
     PS1="w$(parse_git_branch) $ "
    
       to your promptstring to show current branch when in a git-tracked directory.
       (see http://b.lesseverything.com/2008/3/25/got-git-howto-git-and-github)
    

    git -> hg conversion

    You can use this script:

    #! /bin/bash
    
    work=`mktemp -t -d sym.XXX`
    git format-patch -k -p -o $work master..HEAD
    # add a new line after the subject line so that Mercurial imports it fine.
    sed -i '4a\' $work/*
    cd ~/repos/sympy.hg/
    hg import $work/*
    rm -r $work
    

    to convert all patches between master..HEAD to mercurial repository sitting at ~/repos/sympy.hg/.

    Alternatively, you could use the hg-git Mercurial plugin.

    how to checkout remote branch

    Start with some repository, for example create a new one from scratch:

    $ mkdir sympy
    $ cd sympy
    $ git init
    
    or clone our official repository:
    $ git clone git://git.sympy.org/sympy.git
    $ cd sympy
    
    Now let's say you want to checkout some branch from git://github.com/certik/sympy.git. The canonical way is to add it to your remotes:
    $ git remote add ondrej git://github.com/certik/sympy.git
    
    Then fetch all branches from there into your remote branches:
    $ git fetch ondrej
    
    You can now list them with "git branch -r", or examine them with "git log ondrej/some_branch". Finally, to checkout the mpmath5 branch, do:
    $ git checkout -b mpmath5 ondrej/mpmath5

    ================= End

  • 相关阅读:
    Ansible概述
    iptables端口转发
    iptables配置实例
    iptables常用操作
    iptables常用命令
    每日总结3.15
    每日总结3.12
    每日总结3.11
    每日总结3.10
    每日总结3.9
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/10193435.html
Copyright © 2011-2022 走看看