我在运行Linux发行版的共享主机方案上使用git。因为它是共享的,所以我无法访问sudo
。该机器已经安装在1.7.1
中的git版本/usr/bin/
,但此版本在这一点上相当史前。我已经使用make install
来获取2.14.1
中的当前版本~/git-2.14.1/
。正如this answer所详述,我可以从命令行访问正确版本的git,如下所示:
$ git --version
git version 2.14.1
这是对$PATH
中~/.bash_profile
变量的简单更改,所以我可以使用git就好了。
我的~/.gitconfig
文件中有一个快捷方式列表,可让我更快地使用git:
[alias]
co = checkout
st = status
ci = commit
... etc etc etc
当我调用这些(例如git st
)时,我从错误版本的git中得到结果。它可以追溯到1.7.1
。如果我输入完整命令(例如git status
),它将使用正确版本的git。
我在~./bashrc
:
git () {
case "$*" in
st* ) shift 1; command ~/git-2.14.1/git status "$@" ;;
* ) shift 1; command ~/git-2.14.1/git "$@" ;;
esac
}
自写作以来我source
编辑。
我也尝试过:
alias git="~/git-2.14.1/git"
无济于事。
是否有一种解决方法可以让我在我喜欢的git版本中使用这些快捷方式?我想通过将指针重定向到不同的位置来隐藏配置文件的方法,但我不知道是否存在任何这样的指针。
或者,有没有办法在没有root
访问权限的情况下完全禁用以前版本的git?
答案 0 :(得分:1)
当我调用这些(例如git st)时,我从错误版本的git中得到结果。它可以追溯到1.7.1
这不是我在Ubuntu会话中看到的。
我的.gitconfig
1502813688437 geckodriver INFO geckodriver 0.18.0
1502813688445 geckodriver INFO Listening on 127.0.0.1:37427
1502813688743 geckodriver::marionette INFO Starting browser /Applications/Firefox.app/Contents/MacOS/firefox-bin with args ["-marionette"]
1502813691158 Marionette INFO Listening on port 62402
1502813691575 Marionette DEBUG loaded listener.js
2017-08-15 17:14:51.696 plugin-container[1907:206445] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x913b, name = 'com.apple.tsm.portname'
See /usr/include/servers/bootstrap_defs.h for the error codes.
2017-08-15 17:14:51.700 plugin-container[1907:206445] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x9503, name = 'com.apple.CFPasteboardClient'
See /usr/include/servers/bootstrap_defs.h for the error codes.
Aug 15, 2017 5:14:51 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
1502813691752 Marionette DEBUG Received DOM event "beforeunload" for "about:blank"
1502813691853 Marionette DEBUG Received DOM event "pagehide" for "about:blank"
1502813691853 Marionette DEBUG Received DOM event "unload" for "about:blank"
1502813691864 Marionette DEBUG Received DOM event "DOMContentLoaded" for "http://10.32.16.35:3000/"
1502813691904 Marionette DEBUG Received DOM event "pageshow" for "http://10.32.16.35:3000/"
这意味着我输入[alias]
st = status
br = branch
v = !git version
,以检查git v
(与git version
相同)。
如果我将PATH更改为新编译的Git,我会看到不同的版本。
git --version
答案 1 :(得分:1)
这是我发现的。如果我取出.gitconfig
的别名部分,前面提到的shell包装函数就可以了。如果我删除它并重新启动ssh连接,则没有任何效果(如预期的那样)。
我在this answer的帮助下发现,有一个神奇的GIT_EXEC_PATH
变量告诉git在哪里可以找到git-add
,git-commit
,{{1}等工具等等。 al ..取消注释git-status
文件的别名部分并使用
.gitconfig
可以使用$ export GIT_EXEC_PATH=/path/to/my/new/git's/executables/
文件中的别名。对我来说,有效的路径与我安装的文件夹相同:.gitconfig
。您可以使用以下命令检查~/git-2.14.1
的当前值:
GIT_EXEC_PATH
此外,$ git --exec-path
/path/to/my/new/git's/executables/
也适用。我的理解是git使用别名而不是通过调用echo $GIT_EXEC_PATH
的git实例,而是直接通过它的exec路径中的可执行文件。
注意:对我来说,
git <alias>
不起作用,但如果我理解正确,这是等效的命令。
TL; DR :在$ git --exec-path=/path/to/my...
中添加新可执行文件(git-add
,git-status
等)的路径:
.bash_profile