如何在git的contrib目录中正确安装这些工具?

时间:2012-07-22 19:54:17

标签: git

Git包含set of tools contributed by third parties。我不确定我应该如何正确使用这些工具。

例如,我想使用git-subtree。似乎有很多方法可以使用它:

  1. 复制到我的路径

    cp /path/to/git-subtree.sh /usr/local/bin/git-subtree
    chmod +x /usr/local/bin/git-subtree
    

    工作正常,感觉有点hacky。

  2. 符号链接到我的路径

    chmod +x /path/to/git-subtree.sh
    ln -s /path/to/git-subtree.sh /usr/local/bin/git-subtree
    

    同样有效,感觉稍微不那么黑客

  3. 使用git别名

    将以下内容添加到我的全局.gitconfig文件中:

    [alias]
        subtree = !/path/to/git-subtree.sh
    

    再次好旧的chmod:

    chmod +x /path/to/git-subtree.sh
    

    工作,感觉很好,git-ish。

  4. 使用Makefile

    根据INSTALL file

    cd /path/to/git-subtree.sh
    make
    make install
    make install-doc
    

    对我不起作用,它会尝试安装到不存在的路径。也许这是因为我使用homebrew而不是从源代码安装git?我懒得去调查;我已经有三种工作方式。 :)

  5. 所以我的问题是,哪些是安装git-contrib附加组件的首选方式?甚至还有一种首选方式吗?还有其他选择我没有建议比上面列出的更好吗?

5 个答案:

答案 0 :(得分:10)

来自git / contrib / git-subtree:

  

如何安装git-subtree
     ==========================

     

首先,从顶级源目录构建。

     

然后,在contrib / subtree中,运行:

 make
 make install
 make install-doc
     

如果您使用configure来执行主构建,那么git-subtree构建将会      拿起那些设置。如果没有,你可能需要提供一个      前缀值:

 make prefix=<some dir>
 make prefix=<some dir> install
 make prefix=<some dir> install-doc
     

要运行测试,首先将git-subtree复制到主构建区域,以便      新建的git可以找到它:

 cp git-subtree ../..
     

然后:

 make test

我刚刚确认这有效:

  1. 通过现有git下载源代码
  2. 已安装构建代码

    $ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
    
  3. 查看最新发布的分支并构建

    $ git co v1.7.11.3  
    $ make prefix=/usr/local all  
    $ sudo make prefix=/usr/local install  
    
  4. 构建并安装contrib / subtree

    $ cd contrib/subtree  
    $ make  
    $ make install  
    $ make install-doc   
    
  5. 验证一切正常

    /usr/local/bin/git  
    [todd@montreal-01 subtree ((v1.7.11.3))]$ git --version  
    git version 1.7.11.3  
    
  6. 检查,我们有最新的git。

    [todd@montreal-01 subtree ((v1.7.11.3))]$ git subtree  
    usage: git subtree add   --prefix=<prefix> <commit>  
        or: git subtree merge --prefix=<prefix> <commit>  
        or: git subtree pull  --prefix=<prefix> <repository> <refspec...>  
        or: git subtree push  --prefix=<prefix> <repository> <refspec...>  
        or: git subtree split --prefix=<prefix> <commit...>
    
        -h, --help            show the help  
        -q                    quiet  
        -d                    show debug messages  
        -P, --prefix ...      the name of the subdir to split out  
        -m, --message ...     use the given message as the commit message for the merge commit  
    
    options for 'split'  
        --annotate ...        add a prefix to commit message of new commits  
        -b, --branch ...      create a new branch from the split subtree  
        --ignore-joins        ignore prior --rejoin commits  
        --onto ...            try connecting new tree to an existing one  
        --rejoin              merge the new branch back into HEAD  
    
    options for 'add', 'merge', 'pull' and 'push'  
        --squash              merge subtree changes as a single commit  
    

    检查,我们有子树工作。

答案 1 :(得分:8)

这对我来说最简单,在Ubuntu 12.10上安装git-subtree:

获取代码

git clone https://github.com/git/git.git --depth=1
cd git/contrib/subtree
make

将其“安装”到git工具目录

sudo cp git-subtree /usr/lib/git-core/

对于手册页,你需要asciidoc这不是一个小的安装,但如果你有它:

make doc
gzip git-subtree.1
sudo cp git-subtree.1.gz /usr/share/man/man1

就是这样。

答案 2 :(得分:4)

Contribs是一系列有用的东西。您不要将它们作为包安装。例如,要安装选项卡完成,只需从.bash_profile脚本中获取该脚本即可。该文件夹中的每个contrib都有自己的使用方式。

从源代码编译git

make
sudo make install

安装所有先决条件后。

答案 3 :(得分:2)

所有这些看起来都比必要的复杂一点。
(也许是因为install.sh是最近添加的?)
这对我有用。或者看起来如此。

# go to a directory where it's ok to put temporary stuff
cd ~
git clone git://github.com/apenwarr/git-subtree.git
cd git-subtree/
# shell script does the job for you.
sudo sh ./install.sh
cd ..
# remove the git cloned stuff, now that all relevant things have been copied (we hope)
rm -r git-subtree

# test that it works
git subtree
# should print some help/usage stuff.

有一条指示主要说明: https://github.com/apenwarr/git-subtree/blob/master/INSTALL

我比那更愚蠢。我需要告诉我,在运行shell脚本之前,我必须将(git clone)的东西下载到任意位置,并且之后可以处理这些东西。

install.sh的内容非常有启发性,
https://github.com/apenwarr/git-subtree/blob/master/install.sh
如果您想安装一个不提供自己的install.sh的git thingie,这可能是一个可以开始的地方。

答案 4 :(得分:0)

以下所有命令仅在Ubuntu中进行测试:

curl -L https://raw.github.com/gist/3426227 | bash

现在,这里是如何在ubuntu中使用git作为包安装最新的git

将其作为包(优先):

sudo apt-get remove git -y
sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev asciidoc

如果您没有安装asciidoc,请忽略下面带有make target'install-doc'的行。

这将检出主/最新标记的版本,并将其作为一个包checkinstall安装。

git clone https://github.com/git/git.git
cd git
make prefix=/usr/local all
sudo checkinstall --pkgname=git make prefix=/usr/local install

然后是contrib:

cd contrib/subtree
make prefix=/usr/local
sudo checkinstall --pkgname=git-subtree make prefix=/usr/local install

...回答yesy,询问是否从主文件夹中排除文件。

sudo checkinstall --pkgname=git-subtree-doc make prefix=/usr/local install-doc

...回答yesy,询问是否从主文件夹中排除文件。

您现在可以处理git包了:

dpkg -r git

和子树包:

dpkg -r git-subtree
dpkg -r git-subtree-doc

如果你不想让半个技巧的乳胶perl脚本在之后占用硬盘空间:

sudo apt-get remove asciidoc -y
sudo apt-get autoremove -y

所有这些(所有构建代码)

sudo apt-get remove -y libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev asciidoc
sudo apt-get autoremove -y

感谢@toddg提供我需要的基本命令!

我无法让git subtree --help查找正确的手册页。