1.4 起步 - 安装 Git

本文详细介绍了如何在不同操作系统上安装Git,包括从源代码安装的方法及依赖库的安装步骤,适用于Linux、Mac和Windows等平台。

安装 Git

是时候动手尝试下 Git 了,不过得先安装好它。有许多种安装方式,主要分为两种,一种是通过编译源代码来安装;另一种是使用为特定平台预编译好的安装包。

从源代码安装

若是条件允许,从源代码安装有很多好处,至少可以安装最新的版本。Git 的每个版本都在不断尝试改进用户体验,所以能通过源代码自己编译安装最新版本就再好不过了。有些 Linux 版本自带的安装包更新起来并不及时,所以除非你在用最新的 distro 或者 backports,那么从源代码安装其实该算是最佳选择。

Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。在有 yum 的系统上(比如 Fedora)或者有 apt-get 的系统上(比如 Debian 体系),可以用下面的命令安装:

$ yum install curl-devel expat-devel gettext-devel \
  openssl-devel zlib-devel

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
  libz-dev libssl-dev

之后,从下面的 Git 官方站点下载最新版本源代码:

http://git-scm.com/download

然后编译并安装:

$ tar -zxf git-1.7.2.2.tar.gz
$ cd git-1.7.2.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install

现在已经可以用 git 命令了,用 git 把 Git 项目仓库克隆到本地,以便日后随时更新:

$ git clone git://git.kernel.org/pub/scm/git/git.git

在 Linux 上安装

如果要在 Linux 上安装预编译好的 Git 二进制安装包,可以直接用系统提供的包管理工具。在 Fedora 上用 yum 安装:

$ yum install git-core

在 Ubuntu 这类 Debian 体系的系统上,可以用 apt-get 安装:

$ apt-get install git

在 Mac 上安装

在 Mac 上安装 Git 有两种方式。最容易的当属使用图形化的 Git 安装工具,界面如图 1-7,下载地址在:

http://sourceforge.net/projects/git-osx-installer/


图 1-7. Git OS X 安装工具

另一种是通过 MacPorts (http://www.macports.org) 安装。如果已经装好了 MacPorts,用下面的命令安装 Git:

$ sudo port install git-core +svn +doc +bash_completion +gitweb

这种方式就不需要再自己安装依赖库了,Macports 会帮你搞定这些麻烦事。一般上面列出的安装选项已经够用,要是你想用 Git 连接 Subversion 的代码仓库,还可以加上 +svn 选项,具体将在第八章作介绍。(译注:还有一种是使用 homebrew(https://github.com/mxcl/homebrew):brew install git。)

在 Windows 上安装

在 Windows 上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:

http://msysgit.github.com/

完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。

给 Windows 用户的敬告:你应该在 msysGit 提供的 Unix 风格的 shell 来运行 Git。在 Unix 风格的 shell 中,可以使用本书中提及的复杂多行的命令。对于那些需要在 Windows 命令行中使用 Git 的用户,必须注意:在参数中间有空格的时候,必须使用双引号将参数括起来(在 Linux 中是单引号);另外,如果扬抑符(^)作为参数的结尾,并且作为这一行的最后一个字符,则这个参数也需要用双引号括起来。因为扬抑符在 Windows 命令行中表示续行(译注:即下一行为这一行命令的继续)。


本文来自 http://git-scm.com/ 保存下来,方便自己查阅。

fuyu1@ubuntu:~/git-2.7.4$ sudo apt install build-essential libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 gettext 已经是最新的版本。 libssl-dev 已经是最新的版本。 下列软件包是自动安装的并且现在不需要了: git-man liberror-perl Use 'apt-get autoremove' to remove them. 将会安装下列额外的软件包: dpkg-dev fakeroot libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libdpkg-perl libfakeroot libfile-fcntllock-perl 建议安装: debian-keyring libcurl4-doc libcurl3-dbg 下列软件包将被【卸载】: libcurl4-openssl-dev 下列【新】软件包将被安装: build-essential dpkg-dev fakeroot libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libcurl4-gnutls-dev libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl 升级了 0 个软件包,新安装11 个软件包,要卸载 1 个软件包,有 4 个软件包未被升级。 需要下载 1,434 kB 的归档。 解压缩后会消耗 4,975 kB 的额外空间。 您希望继续执行吗? [Y/n] y 获取:1 http://rdsource.tp-link.com/ubuntu/ trusty-updates/main libdpkg-perl all 1.17.5ubuntu5.8 [179 kB] 获取:2 http://rdsource.tp-link.com/ubuntu/ trusty-updates/main dpkg-dev all 1.17.5ubuntu5.8 [726 kB] 获取:3 http://rdsource.tp-link.com/ubuntu/ trusty/main build-essential amd64 11.6ubuntu6 [4,838 B] 获取:4 http://rdsource.tp-link.com/ubuntu/ trusty/main libfakeroot amd64 1.20-3ubuntu2 [25.4 kB] 获取:5 http://rdsource.tp-link.com/ubuntu/ trusty/main fakeroot amd64 1.20-3ubuntu2 [55.0 kB] 获取:6 http://rdsource.tp-link.com/ubuntu/ trusty/main libalgorithm-diff-perl all 1.19.02-3 [50.0 kB] 获取:7 http://rdsource.tp-link.com/ubuntu/ trusty/main libalgorithm-diff-xs-perl amd64 0.04-2build4 [12.6 kB] 获取:8 http://rdsource.tp-link.com/ubuntu/ trusty/main libalgorithm-merge-perl all 0.08-2 [12.7 kB] 获取:9 http://rdsource.tp-link.com/ubuntu/ trusty-updates/main libcurl4-gnutls-dev amd64 7.35.0-1ubuntu2.20 [237 kB] 获取:10 http://rdsource.tp-link.com/ubuntu/ trusty-updates/main libexpat1-dev amd64 2.1.0-4ubuntu1.4 [115 kB] 获取:11 http://rdsource.tp-link.com/ubuntu/ trusty/main libfile-fcntllock-perl amd64 0.14-2build1 [15.9 kB] 已下载 1,434 kB,耗时 2秒 (507 kB/s) (正在读取数据库 ... 系统当前共安装106043 个文件和目录。) 正在卸载 libcurl4-openssl-dev:amd64 (7.35.0-1ubuntu2.20) ... 正在处理用于 man-db (2.6.7.1-1ubuntu1) 的触发器 ... 正在选中未选择的软件包 libdpkg-perl。 (正在读取数据库 ... 系统当前共安装106022 个文件和目录。) 正准备解包 .../libdpkg-perl_1.17.5ubuntu5.8_all.deb ... 正在解包 libdpkg-perl (1.17.5ubuntu5.8) ... 正在选中未选择的软件包 dpkg-dev。 正准备解包 .../dpkg-dev_1.17.5ubuntu5.8_all.deb ... 正在解包 dpkg-dev (1.17.5ubuntu5.8) ... 正在选中未选择的软件包 build-essential。 正准备解包 .../build-essential_11.6ubuntu6_amd64.deb ... 正在解包 build-essential (11.6ubuntu6) ... 正在选中未选择的软件包 libfakeroot:amd64。 正准备解包 .../libfakeroot_1.20-3ubuntu2_amd64.deb ... 正在解包 libfakeroot:amd64 (1.20-3ubuntu2) ... 正在选中未选择的软件包 fakeroot。 正准备解包 .../fakeroot_1.20-3ubuntu2_amd64.deb ... 正在解包 fakeroot (1.20-3ubuntu2) ... 正在选中未选择的软件包 libalgorithm-diff-perl。 正准备解包 .../libalgorithm-diff-perl_1.19.02-3_all.deb ... 正在解包 libalgorithm-diff-perl (1.19.02-3) ... 正在选中未选择的软件包 libalgorithm-diff-xs-perl。 正准备解包 .../libalgorithm-diff-xs-perl_0.04-2build4_amd64.deb ... 正在解包 libalgorithm-diff-xs-perl (0.04-2build4) ... 正在选中未选择的软件包 libalgorithm-merge-perl。 正准备解包 .../libalgorithm-merge-perl_0.08-2_all.deb ... 正在解包 libalgorithm-merge-perl (0.08-2) ... 正在选中未选择的软件包 libcurl4-gnutls-dev:amd64。 正准备解包 .../libcurl4-gnutls-dev_7.35.0-1ubuntu2.20_amd64.deb ... 正在解包 libcurl4-gnutls-dev:amd64 (7.35.0-1ubuntu2.20) ... 正在选中未选择的软件包 libexpat1-dev:amd64。 正准备解包 .../libexpat1-dev_2.1.0-4ubuntu1.4_amd64.deb ... 正在解包 libexpat1-dev:amd64 (2.1.0-4ubuntu1.4) ... 正在选中未选择的软件包 libfile-fcntllock-perl。 正准备解包 .../libfile-fcntllock-perl_0.14-2build1_amd64.deb ... 正在解包 libfile-fcntllock-perl (0.14-2build1) ... 正在处理用于 man-db (2.6.7.1-1ubuntu1) 的触发器 ... 正在设置 libdpkg-perl (1.17.5ubuntu5.8) ... 正在设置 dpkg-dev (1.17.5ubuntu5.8) ... 正在设置 build-essential (11.6ubuntu6) ... 正在设置 libfakeroot:amd64 (1.20-3ubuntu2) ... 正在设置 fakeroot (1.20-3ubuntu2) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in 自动模式 正在设置 libalgorithm-diff-perl (1.19.02-3) ... 正在设置 libalgorithm-diff-xs-perl (0.04-2build4) ... 正在设置 libalgorithm-merge-perl (0.08-2) ... 正在设置 libcurl4-gnutls-dev:amd64 (7.35.0-1ubuntu2.20) ... 正在设置 libexpat1-dev:amd64 (2.1.0-4ubuntu1.4) ... 正在设置 libfile-fcntllock-perl (0.14-2build1) ... fuyu1@ubuntu:~/git-2.7.4$ make prefix=/usr/local all SUBDIR git-gui SUBDIR gitk-git SUBDIR perl SUBDIR templates fuyu1@ubuntu:~/git-2.7.4$ sudo make prefix=/usr/local install SUBDIR git-gui SUBDIR gitk-git SUBDIR perl SUBDIR templates install -d -m 755 '/usr/local/bin' install -d -m 755 '/usr/local/libexec/git-core' install git-credential-store git-daemon git-fast-import git-http-backend git-imap-send git-sh-i18n--envsubst git-shell git-show-index git-upload-pack git-remote-testsvn git-http-fetch git-credential-cache git-credential-cache--daemon git-remote-http git-remote-https git-remote-ftp git-remote-ftps git-bisect git-difftool--helper git-filter-branch git-merge-octopus git-merge-one-file git-merge-resolve git-mergetool git-quiltimport git-rebase git-request-pull git-stash git-submodule git-web--browse git-add--interactive git-difftool git-archimport git-cvsexportcommit git-cvsimport git-cvsserver git-relink git-send-email git-svn git-p4 git-instaweb '/usr/local/libexec/git-core' install -m 644 git-mergetool--lib git-parse-remote git-rebase--am git-rebase--interactive git-rebase--merge git-sh-setup git-sh-i18n '/usr/local/libexec/git-core' install git git-upload-pack git-receive-pack git-upload-archive git-shell git-cvsserver '/usr/local/bin' make -C templates DESTDIR='' install make[1]: 正在进入目录 `/home/fuyu1/git-2.7.4/templates' install -d -m 755 '/usr/local/share/git-core/templates' (cd blt && tar cf - .) | \ (cd '/usr/local/share/git-core/templates' && umask 022 && tar xof -) make[1]:正在离开目录 `/home/fuyu1/git-2.7.4/templates' install -d -m 755 '/usr/local/libexec/git-core/mergetools' install -m 644 mergetools/* '/usr/local/libexec/git-core/mergetools' install -d -m 755 '/usr/local/share/locale' (cd po/build/locale && tar cf - .) | \ (cd '/usr/local/share/locale' && umask 022 && tar xof -) make -C perl prefix='/usr/local' DESTDIR='' install make[1]: 正在进入目录 `/home/fuyu1/git-2.7.4/perl' make[2]: 正在进入目录 `/home/fuyu1/git-2.7.4/perl' Appending installation info to /usr/local/lib/perl/5.18.2/perllocal.pod make[2]:正在离开目录 `/home/fuyu1/git-2.7.4/perl' make[1]:正在离开目录 `/home/fuyu1/git-2.7.4/perl' make -C gitweb install make[1]: 正在进入目录 `/home/fuyu1/git-2.7.4/gitweb' make[2]: 正在进入目录 `/home/fuyu1/git-2.7.4' make[2]: “GIT-VERSION-FILE”是最新的。 make[2]:正在离开目录 `/home/fuyu1/git-2.7.4' install -d -m 755 '/usr/local/share/gitweb' install -m 755 gitweb.cgi '/usr/local/share/gitweb' install -d -m 755 '/usr/local/share/gitweb/static' install -m 644 static/gitweb.js static/gitweb.css static/git-logo.png static/git-favicon.png '/usr/local/share/gitweb/static' make[1]:正在离开目录 `/home/fuyu1/git-2.7.4/gitweb' make -C gitk-git install make[1]: 正在进入目录 `/home/fuyu1/git-2.7.4/gitk-git' install -m 755 gitk-wish '/usr/local/bin'/gitk install -d -m 755 '/usr/local/share/gitk/lib/msgs' install -m 644 po/bg.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/ca.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/de.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/es.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/fr.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/hu.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/it.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/ja.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/pt_br.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/ru.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/sv.msg '/usr/local/share/gitk/lib/msgs' && install -m 644 po/vi.msg '/usr/local/share/gitk/lib/msgs' && true make[1]:正在离开目录 `/home/fuyu1/git-2.7.4/gitk-git' make -C git-gui gitexecdir='/usr/local/libexec/git-core' install make[1]: 正在进入目录 `/home/fuyu1/git-2.7.4/git-gui' DEST /usr/local/libexec/git-core INSTALL 755 git-gui INSTALL 755 git-gui--askpass LINK git-citool -> git-gui DEST /usr/local/share/git-gui/lib INSTALL 644 tclIndex INSTALL 644 about.tcl INSTALL 644 blame.tcl INSTALL 644 branch_checkout.tcl INSTALL 644 branch_create.tcl INSTALL 644 branch_delete.tcl INSTALL 644 branch_rename.tcl INSTALL 644 branch.tcl INSTALL 644 browser.tcl INSTALL 644 checkout_op.tcl INSTALL 644 choose_font.tcl INSTALL 644 choose_repository.tcl INSTALL 644 choose_rev.tcl INSTALL 644 class.tcl INSTALL 644 commit.tcl INSTALL 644 console.tcl INSTALL 644 database.tcl INSTALL 644 date.tcl INSTALL 644 diff.tcl INSTALL 644 encoding.tcl INSTALL 644 error.tcl INSTALL 644 index.tcl INSTALL 644 line.tcl INSTALL 644 logo.tcl INSTALL 644 merge.tcl INSTALL 644 mergetool.tcl INSTALL 644 option.tcl INSTALL 644 remote_add.tcl INSTALL 644 remote_branch_delete.tcl INSTALL 644 remote.tcl INSTALL 644 search.tcl INSTALL 644 shortcut.tcl INSTALL 644 spellcheck.tcl INSTALL 644 sshkey.tcl INSTALL 644 status_bar.tcl INSTALL 644 themed.tcl INSTALL 644 tools_dlg.tcl INSTALL 644 tools.tcl INSTALL 644 transport.tcl INSTALL 644 win32.tcl INSTALL 644 git-gui.ico INSTALL 644 win32_shortcut.js DEST /usr/local/share/git-gui/lib/msgs INSTALL 644 bg.msg INSTALL 644 de.msg INSTALL 644 el.msg INSTALL 644 fr.msg INSTALL 644 hu.msg INSTALL 644 it.msg INSTALL 644 ja.msg INSTALL 644 nb.msg INSTALL 644 pt_br.msg INSTALL 644 ru.msg INSTALL 644 sv.msg INSTALL 644 vi.msg INSTALL 644 zh_cn.msg make[1]:正在离开目录 `/home/fuyu1/git-2.7.4/git-gui' bindir=$(cd '/usr/local/bin' && pwd) && \ execdir=$(cd '/usr/local/libexec/git-core' && pwd) && \ { test "$bindir/" = "$execdir/" || \ for p in git git-shell git-upload-pack git-cvsserver; do \ rm -f "$execdir/$p" && \ test -z "" && \ ln "$bindir/$p" "$execdir/$p" 2>/dev/null || \ cp "$bindir/$p" "$execdir/$p" || exit; \ done; \ } && \ for p in git-receive-pack git-upload-archive; do \ rm -f "$bindir/$p" && \ test -z "" && \ ln "$bindir/git" "$bindir/$p" 2>/dev/null || \ ln -s "git" "$bindir/$p" 2>/dev/null || \ cp "$bindir/git" "$bindir/$p" || exit; \ done && \ for p in git-add git-am git-annotate git-apply git-archive git-bisect--helper git-blame git-branch git-bundle git-cat-file git-check-attr git-check-ignore git-check-mailmap git-check-ref-format git-checkout-index git-checkout git-clean git-clone git-column git-commit-tree git-commit git-config git-count-objects git-credential git-describe git-diff-files git-diff-index git-diff-tree git-diff git-fast-export git-fetch-pack git-fetch git-fmt-merge-msg git-for-each-ref git-fsck git-gc git-get-tar-commit-id git-grep git-hash-object git-help git-index-pack git-init-db git-interpret-trailers git-log git-ls-files git-ls-remote git-ls-tree git-mailinfo git-mailsplit git-merge git-merge-base git-merge-file git-merge-index git-merge-ours git-merge-recursive git-merge-tree git-mktag git-mktree git-mv git-name-rev git-notes git-pack-objects git-pack-redundant git-pack-refs git-patch-id git-prune-packed git-prune git-pull git-push git-read-tree git-receive-pack git-reflog git-remote git-remote-ext git-remote-fd git-repack git-replace git-rerere git-reset git-rev-list git-rev-parse git-revert git-rm git-send-pack git-shortlog git-show-branch git-show-ref git-stripspace git-submodule--helper git-symbolic-ref git-tag git-unpack-file git-unpack-objects git-update-index git-update-ref git-update-server-info git-upload-archive git-var git-verify-commit git-verify-pack git-verify-tag git-worktree git-write-tree git-cherry git-cherry-pick git-format-patch git-fsck-objects git-init git-merge-subtree git-show git-stage git-status git-whatchanged; do \ rm -f "$execdir/$p" && \ test -z "" && \ ln "$execdir/git" "$execdir/$p" 2>/dev/null || \ ln -s "git" "$execdir/$p" 2>/dev/null || \ cp "$execdir/git" "$execdir/$p" || exit; \ done && \ remote_curl_aliases="git-remote-https git-remote-ftp git-remote-ftps" && \ for p in $remote_curl_aliases; do \ rm -f "$execdir/$p" && \ test -z "" && \ ln "$execdir/git-remote-http" "$execdir/$p" 2>/dev/null || \ ln -s "git-remote-http" "$execdir/$p" 2>/dev/null || \ cp "$execdir/git-remote-http" "$execdir/$p" || exit; \ done && \ ./check_bindir "z$bindir" "z$execdir" "$bindir/git-add" fuyu1@ubuntu:~/git-2.7.4$ git --version -bash: /usr/bin/git: 没有那个文件或目录
最新发布
09-03
从输出信息来看,编译安装 Git 后,直接运行 `git --version` 报错 `-bash: /usr/bin/git: 没有那个文件或目录`,说明系统仍在尝试调用旧版 Git(默认路径 `/usr/bin/git`),而新编译的 Git 安装在 `/usr/local/bin/git`。以下是解决方案: --- ### **解决方法** 1. **检查新版本路径** 确认 Git安装到 `/usr/local/bin`: ```bash ls -l /usr/local/bin/git ``` 如果存在,说明编译安装成功。 2. **更新 `PATH` 环境变量** `/usr/local/bin` 优先级应高于 `/usr/bin`,但可能因 `PATH` 顺序导致问题。检查并调整: ```bash echo $PATH # 临时调整(当前会话生效) export PATH=/usr/local/bin:$PATH # 永久调整(添加到 ~/.bashrc) echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc source ~/.bashrc ``` 3. **验证版本** 重新运行: ```bash git --version ``` 应输出 `git version 2.7.4`。 4. **(可选)卸载旧版 Git** 如果旧版 Git 干扰,可通过包管理器卸载: ```bash sudo apt remove git ``` 或直接删除二进制文件(谨慎操作): ```bash sudo rm -f /usr/bin/git ``` --- ### **原因分析** - 系统默认从 `/usr/bin` 查找命令,而编译安装Git 在 `/usr/local/bin`。 - 旧版 Git 可能被部分卸载(如依赖冲突时 `apt` 自动移除了 `libcurl4-openssl-dev`),但残留路径未更新。 --- ### **后续建议** - 使用 `which git` 确认当前调用的路径。 - 如果问题持续,检查是否有其他脚本或配置覆盖了 `PATH`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值