如何使用git命令而不需要人工交互?

5vf7fwbs  于 2022-12-02  发布在  Git
关注(0)|答案(3)|浏览(195)

我有一个远程机器,它有一个程序,使用一个只读svn的用户从仓库中下载一些源代码.现在正在使用svn,而不需要人工干预,我是这样想的:
执行 checkout :

p = Runtime.getRuntime().exec("svn checkout --non-interactive --trust-server-cert --username "+Constants.svnUser+" --password "+Constants.svnPassword+" "+repositoryURL+" ." , null , dir);

正在更新代码:

p = Runtime.getRuntime().exec("svn update --non-interactive --trust-server-cert --username "+Constants.svnUser+" --password "+Constants.svnPassword+" ", null , dir);

它运行得很好,但是现在我试图用一个只读的git用户从Git仓库下载源代码,我找不到用git做同样的非交互行为的方法。
给定一个git repo,一个git用户和一个git密码,如何在没有人为干预的情况下初始化git并克隆, checkout 或拉取源代码?
找不到任何关于如何给予这三个项目的信息。
提前谢谢你。

moiiocjp

moiiocjp1#

从git v2.3.0开始,你可以设置环境变量GIT_TERMINAL_PROMPT=0,以避免脚本在git命令等待手动认证时挂起。

范例:

$ GIT_TERMINAL_PROMPT=0 git clone https://git.example.com/my/repo.git
Cloning into 'repo'...
fatal: could not read Username for 'https://git.example.com': terminal prompts disabled
$ echo $?
128

**来源:**man 1 git

t0ybt7op

t0ybt7op2#

我不知道你的用例,但我经常使用--no-pager标志,例如在终端直接输出diff
$ git --无分页差异

qojgxg4l

qojgxg4l3#

Git命令没有--non-interactive开关,你只需要确保你调用命令的方式不可能是交互式的,这意味着你不应该使用git pull,因为这会根据您的配置和参数执行mergerebase,这可能会导致需要手动解决的冲突。相反,您应该使用git fetch,然后使用一个命令将工作树替换为来自远程的内容,如git reset --hard master origin/master或类似的内容。
您可能会从http://gitolite.com/deploy.html中获得一些关于您实际要使用哪些命令的指针。

相关问题