我将git repo克隆到远程服务器,使用ssh与之通信。使用git fetch remote
有效,但是当我输入git push remote
时,我得到了这个输出:
Counting objects: 242, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (184/184), done.
Writing objects: 100% (215/215), 238.00 KiB | 0 bytes/s, done.
Total 215 (delta 58), reused 0 (delta 0)
fatal: unable to look up current user in the passwd file: no such user
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
我的服务器管理员说我的ssh用户是在chroot-jail中配置的。可以做些什么来解决这个错误?
答案 0 :(得分:4)
事实证明这是"修复"在2.6.5中 - 不再需要对许多git操作进行适当的识别。
提交的要点:
ident:在非严格模式下放松getpwuid错误
如果用户未指定身份,我们必须转向 getpwuid()找到用户名或gecos字段,我们马上就死了 当getpwuid失败时(例如,因为用户不存在)。这是 可以进行提交,我们已经设置了IDENT_STRICT并且想要 保佑虚假输入。
但是对于像reflog这样的东西,身份是最好的努力",它 可能是痛苦的。例如,即使运行" git clone"使用UID 不在/ etc / passwd会导致git barfing,因为我们无法做到 找到要放入reflog的标识。
我们可以改为回退,而不是在xgetpwuid_self中死亡 价值,并设置"虚假"旗。对于电子邮件中的用户名,我们 已经有一个" default_email_is_bogus"旗。对于名称字段,我们 引入(并检查)匹配的" default_name_is_bogus"旗。作为一个 奖金,这意味着你现在可以得到平常的"告诉我你是谁"忠告 而不只是一个"没有这样的用户"错误。
新的xgetpwuid_self
现在实现如下:
static struct passwd *xgetpwuid_self(int *is_bogus)
{
struct passwd *pw;
errno = 0;
pw = getpwuid(getuid());
if (!pw) {
static struct passwd fallback;
fallback.pw_name = "unknown";
#ifndef NO_GECOS_IN_PWENT
fallback.pw_gecos = "Unknown";
#endif
pw = &fallback;
if (is_bogus)
*is_bogus = 1;
}
return pw;
}
答案 1 :(得分:3)
struct passwd *xgetpwuid_self(void)
{
struct passwd *pw;
errno = 0;
pw = getpwuid(getuid());
if (!pw)
die(_("unable to look up current user in the passwd file: %s"),
errno ? strerror(errno) : _("no such user"));
return pw;
}
这意味着common library getpwuid
函数在/ etc / passwd中找不到用于调用git进程的用户帐户的密码条目
就像nscd service不知道如何解决某些服务一样。
请管理员仔细检查帐户监狱目录(我们称之为$D
),如this article所示。特别是它的$D/etc
文件夹:
cp -fv /etc/{group,prelink.cache,services,adjtime,shells,gshadow,shadow,hosts.deny,localtime,nsswitch.conf,nscd.conf,prelink.conf,protocols,hosts,passwd,ld.so.cache,ld.so.conf,resolv.conf,host.conf} $D/et
答案 2 :(得分:0)
问题在于git无法识别您的身份。这是由于缺少.gitconfig文件,该文件应存在于主目录中。 (请ls -la〜验证它是否丢失)
修复:
git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "OUR_NAME@example.com"
这将生成该文件并解决错误。