这是与如何编辑 git 的历史记录以更正不正确的电子邮件地址/名称相关的问题。使用git rebase -i <first commit>, git commit --amend --author "Foo <foo@example.com>", 和git rebase --continue,我能够修复除第一个提交之外的所有提交的日志。如何修复第一次提交?
我按照这个例子在我的服务器上设置了一个 git 存储库。它奏效了,我成功地将push我的代码写入了它。
但是现在,我如何拉取或克隆?
使用文档,我试过
git 克隆 http://REMOTE_SERVER/home/git/example.git
.. 但对我来说,我得到:
致命:http://myserverip/home/git/example.git/info/refs 未找到:您是否在服务器上运行了 git update-server-info?
我运行了 git-update-server info,但没有任何改变
啊,等一下。我把它改成了git clone ssh://REMOTE_SERVER/home/git/example.git,我得到了一些东西..它想要我的用户/通行证,但是如何使服务器公开而不需要登录?
我有 Hudson(持续集成系统)和在 Tomcat Windows 服务上运行的 git 插件。msysgit 已安装,并且 msysgit bin 目录位于路径中。PuTTY/Pageant/plink 已安装,并且 msysgit 已配置为使用它们。
我认为,我遇到的问题是拥有 Tomcat/Hudson 服务(本地系统)的用户没有设置 SSH 密钥来克隆 git 存储库。当 git Hudson 插件尝试克隆时,它给出了错误:
$ git clone -o origin git@hostname:project.git "e:\HUDSON_HOME\jobs\Project Trunk\workspace"
ERROR: Error cloning remote repo 'origin' : Could not clone git@hostname:project.git
ERROR: Cause: Error performing git clone -o origin git@hostname:project.git e:\HUDSON_HOME\jobs\Project Trunk\workspace
Trying next repository
ERROR: Could not clone from a repository
FATAL: Could not clone
hudson.plugins.git.GitException: Could not clone
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何设置以便 git 插件/msysgit 在尝试克隆时知道使用特定的 SSH 私钥?我不认为 Pageant 会起作用,因为 …
我们是一个不到十人的团队,需要快速建立一个支持基于活动目录的身份验证的 git 存储库。
最简单的解决方案似乎是使用带有 git 存储库的文件共享并使用 unc 路径访问它,例如
git clone //server/share/repo.git
Run Code Online (Sandbox Code Playgroud)
但是,我们有点担心稳健性。当几个人使用同一个 git 存储库并且没有实际的服务器组件在运行时,并发性是否没有问题?
客户端运行 Windows 7,服务器是 Windows Server 2008R2。使用 msysgit 1.8.1.2
(我很清楚还有很多其他的 git 服务器解决方案,但是,特别是考虑到 AD 身份验证的要求,它们设置起来并不简单)
我在 Ubuntu 13.04 机器上使用 nginx 服务器无法让 git-http-backend 工作。之前在 Debian 7 上试过,但结果相似。基本上我遵循了http://weininger.net/configuration-of-nginx-for-gitweb-and-git-http-backend/但忽略了与 gitweb 相关的任何内容。
我做了以下事情:
使用以下命令安装 nginx、git、git-core 和 fcgiwrap:
apt-get install git git-core nginx fcgiwrap
Run Code Online (Sandbox Code Playgroud)
在 /var/git/test.git 上创建了一个裸仓库,并将其添加到 www-data:
mkdir -p /var/git/test.git
cd /var/git/test.git
git init --bare
git update-server-info
chown -R www-data:www-data /var/git
Run Code Online (Sandbox Code Playgroud)
将 /etc/nginx/sites-enabled/default 替换为
server {
listen 80;
server_name localhost;
location / {
root /var/git;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param PATH_INFO $uri;
fastcgi_param GIT_PROJECT_ROOT /var/git;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
include /etc/nginx/fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
做的时候
GIT_CURL_VERBOSE=1 git clone …Run Code Online (Sandbox Code Playgroud) 我有一个使用 Gitlab 和 OpenVPN 设置的 Ubuntu 12.04 服务器作为我们的 git 和 vpn 服务器。
目前我已经在防火墙中打开了端口 1194 以打开 OpenVPN 并让用户通过 rsa 证书和 google auth 密钥进行身份验证。
我还没有为 SSH 流量打开防火墙,因为我不希望 SSH 完全暴露给 WAN。但是,我们需要能够在不连接到 vpn 的情况下进行推拉。
如何只为有限的 git 用户打开对 WAN 的 ssh 访问,同时允许管理员从 LAN 访问服务器?
我怀疑我应该在 sshd_config 文件中寻找使用匹配组的方向。正如在这个问题中看到的:“我如何设置 OpenSSH 每用户身份验证方法? ”,有人有这方面的经验吗?
编辑:
我最初接受了使用 access.conf 来限制登录访问的答案。但是后来的答案表明,可以通过 match 指令或使用 username@hostaddress 语法在 sshd.conf 中实现相同的目的。
起初我觉得把它放在 sshd 中更直观,而且对于其他管理员来说可能更容易维护和理解。与 sshd.conf 相比,使用 access.conf 有什么强大的优势吗?
如果我要对这里提到的选项的直观程度进行范围划分,我会说: 1. sshd.conf 2. access.conf 3. IpTables
你同意?
执行远程 PowerShell 脚本时出现错误。在我的本地机器上,我正在运行一个 PowerShell 脚本,该脚本Invoke-Command用于cd进入远程 Amazon Windows Server 实例上的目录,然后Invoke-Command执行位于该服务器实例上的脚本。服务器上的脚本正在尝试从 GitHub git clone 存储库。我可以在服务器脚本中成功执行诸如“ls”甚至“git --version”之类的操作。但是git clone,git pull等会导致以下错误:
克隆到 'MyRepo'... + CategoryInfo : NotSpecified: (克隆到 'MyRepo'...:String) [], RemoteException +fullyQualifiedErrorId : NativeCommandError
这是我第一次使用 PowerShell 或 Windows Server。任何人都可以就这个问题提供一些指导。
客户端脚本:
$s = new-pssession -computername $server -credential $user
invoke-command -session $s -scriptblock { cd C:\Repos; ls }
invoke-command -session $s -scriptblock { param ($repo, $branch) & '.\clone.ps1' -repository $repo -branch $branch} -ArgumentList $repository, $branch
exit-pssession
Run Code Online (Sandbox Code Playgroud)
服务器脚本: …
我正在使用 Jenkins 1.557 来观察 Gerrit 2.8 实例的变化。我正在使用以下插件:
当我在 Gerrit 触发器上使用“测试连接”时,它返回成功,所以我知道凭据正在工作。我在“高级”按钮下使用默认值。
对于我的测试构建类型,我使用了 Jenkins 检查的 git repo(我添加了“ls -l”的构建后步骤,它正确显示了 repo 内容)。我将构建触发器设置为“gerrit event”,对于“gerrit trigger”,我选择了“Check non-reviewed patchsets”,并启用了“patchset created”的触发器。gerrit 项目设置似乎正确。
我无法通过上传新更改或更改的新补丁集来启动构建。当我使用“查询并触发 Gerrit 补丁”按钮手动触发构建时,构建会发生,但不会记录任何投票。我显然错过了部分难题 - 如果我 ssh 进入 gerrit 并执行“流事件”,我会看到我期望看到的事件。
Jenkins - 权威指南 - 来自 O'Reilly 并没有真正涵盖 Gerrit。我试图避免轮询,因为此 Jenkins 实例将管理数十个 git 存储库。
调试的下一步是什么?
我正在尝试配置某些 git 存储库以使用特定的公钥/私钥进行身份验证。
这是在 ~/.ssh/config 里面
Host Repo
HostName bitbucket.org
User git
IdentityFile ~/.ssh/ynd
LogLevel DEBUG
Run Code Online (Sandbox Code Playgroud)
这是尝试推送到仓库时的日志
debug1: Connecting to bitbucket.org [104.192.143.1] port 22.
debug1: Connection established.
debug1: identity file /Users/evgenipetrov/.ssh/ynd type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/evgenipetrov/.ssh/ynd-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.9
debug1: Remote protocol version 2.0, remote software version conker_1.0.315-a08d059 app-134
debug1: no match: conker_1.0.315-a08d059 app-134
debug1: Authenticating to bitbucket.org:22 as 'git'
debug1: …Run Code Online (Sandbox Code Playgroud) 我已经设置了一个GitLab VM,并在其上创建了一个项目。现在我正在尝试使用我的 git 客户端从另一台机器连接到它(Git for Windows v2.7.1 ...也尝试升级到最新版本 2.15.1,但没有变化)。
在 Windows 机器上,我尝试:
git push -u origin --all
The authenticity of host 'localgit.local (10.1.2.3)' can't be established.
ECDSA key fingerprint is SHA256:twmcV7LjBtI9vUsDeFEHeH0lUcBAihWtGye0K9vHCrk.
Are you sure you want to continue connecting (yes/no)? no
Run Code Online (Sandbox Code Playgroud)
我选择“否”是因为当我在虚拟机上仔细检查时,我发现了不同的指纹:
ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 7e:e4:4e:7f:47:b0:41:75:2c:45:bd:be:f5:44:77:d7 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
Run Code Online (Sandbox Code Playgroud)
好的,它是十六进制格式,所以我将其转换为 base64,对吗?
hex: 7ee44e7f47b041752c45bdbef54477d7
base64: fuROf0ewQXUsRb2+9UR31w==
Run Code Online (Sandbox Code Playgroud)
好吧,这不匹配......如果我走另一条路并将该 base64 指纹转换为十六进制并看看它是什么样子怎么办?结果我不能,它是 43 个字符,并且 base64 字符串的长度必须是 4 的倍数。
关于我在这里缺少什么的任何想法?