Git包含set of tools contributed by third parties。我不确定我应该如何正确使用这些工具。
例如,我想使用git-subtree。似乎有很多方法可以使用它:
复制到我的路径
cp /path/to/git-subtree.sh /usr/local/bin/git-subtree
chmod +x /usr/local/bin/git-subtree
工作正常,感觉有点hacky。
符号链接到我的路径
chmod +x /path/to/git-subtree.sh
ln -s /path/to/git-subtree.sh /usr/local/bin/git-subtree
同样有效,感觉稍微不那么黑客
使用git别名
将以下内容添加到我的全局.gitconfig文件中:
[alias]
subtree = !/path/to/git-subtree.sh
再次好旧的chmod:
chmod +x /path/to/git-subtree.sh
工作,感觉很好,git-ish。
使用Makefile
根据INSTALL file。
cd /path/to/git-subtree.sh
make
make install
make install-doc
对我不起作用,它会尝试安装到不存在的路径。也许这是因为我使用homebrew而不是从源代码安装git?我懒得去调查;我已经有三种工作方式。 :)
所以我的问题是,哪些是安装git-contrib附加组件的首选方式?甚至还有一种首选方式吗?还有其他选择我没有建议比上面列出的更好吗?
答案 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
我刚刚确认这有效:
已安装构建代码
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
查看最新发布的分支并构建
$ git co v1.7.11.3
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install
构建并安装contrib / subtree
$ cd contrib/subtree
$ make
$ make install
$ make install-doc
验证一切正常
/usr/local/bin/git
[todd@montreal-01 subtree ((v1.7.11.3))]$ git --version
git version 1.7.11.3
检查,我们有最新的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)
curl -L https://raw.github.com/gist/3426227 | bash
将其作为包(优先):
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
...回答yes
或y
,询问是否从主文件夹中排除文件。
sudo checkinstall --pkgname=git-subtree-doc make prefix=/usr/local install-doc
...回答yes
或y
,询问是否从主文件夹中排除文件。
您现在可以处理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
查找正确的手册页。