gerrit: Unable to negotiate with XX.XX.XX.XX: no matching host key type found. Their offer: ssh-dss

在我把本地程序提交到远程分支上时

$ git push origin share_daily

会提示有如下的错误

Unable to negotiate with XX.XX.XX.XX: no matching host key type found. Their offer: ssh-dss
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

此时我翻阅了大篇幅的文章,英文的中文的,提供几个有价值的链接给大家。

1.Using OpenSSH with legacy SSH implementations:http://www.openssh.com/legacy.html(针对性解决问题)
2.Generating SSH keys:https://help.github.com/articles/generating-ssh-keys/(虽然没有解决我的问题,但长了不少知识,或许对很多的问题可以起到解决的作用)
后来在我的.ssh目录下增加了config文件,命令如下:$ vim config
在config中需要写入如下内容:
Host git.XX.XX.com
HostKeyAlgorithms +ssh-dss
第一句中的XX.XX大家根据自己的项目中ssh链接查看@后面到‘:’前的一段,格式为git.XX.XX.com.保存文件,重新提交就好了
ssh://hzluoyun1@git.XX.XX.com:XXXXX.git
———————
作者:Loreen527
来源:CSDN
原文:https://blog.csdn.net/guoguo527/article/details/50504630
版权声明:本文为博主原创文章,转载请附上博文链接!

java.lang.IllegalStateException: Missing project All-Projects

关掉gerrit服务

./review_site/bin/gerrit.sh stop

清空数据库

cd review_site/bin/
java  -jar ./gerrit.war gsql -d ../ 
DROP ALL OBJECTS;

不这样做会有Server Error,Missing project All-Projects的错误

java.lang.IllegalStateException: Missing project All-Projects 

重新安装一遍gerrit

java -jar gerrit-2.13.6.war init -d review_site

启动服务

./review_site/bin/gerrit.sh start
sudo /etc/init.d/apache2 restart

Git Make时出现:tclsh failed; using unoptimized loading

Git在make的时候报错:Can’t locate ExtUtils/MakeMaker.pm in @INC

解决方法如下:

yum -y install perl-devel perl-CPAN

git 需要perl来编译。然后重新make

Git Make时出现:tclsh failed; using unoptimized loading

MSGFMT    po/bg.msg make[1]: *** [po/bg.msg] 错误 127

yum install tcl  build-essential tk gettext

安装之后使用https操作git 出现 :fatal: Unable to find remote helper for ‘https’

yum install -y curl curl-devel

然后重新安装 git

安装之后 git –version 仍然是旧版本(1.7.12)

git 安装时不使用–prefix指定安装目录,默认安装到/usr/local/bin/git ,需要把/usr/local/bin/git 复制或者ln到 /usr/bin/git

git push 错误:remote: ERROR: committer email address remote: ERROR: does not match your user account.”

链接:https://blog.csdn.net/npjocj/article/details/31735605

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic x86_64)
Apache 2.2
Gerrit:2.8.4
Jenkins:Jenkins ver. 1.559

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Q1. Gerrit “publish and submit” 后冲突“Your change could not be merged due to a path conflict.Please merge (or rebase) the change locally and upload the resolution for review.“

A1.
这个是因为之前我把原来的项目删除后重新创建一个同名的项目,因为数据库里还存有原来的change-ID信息
 
Q2.” remote: ERROR:  committer email address  remote: ERROR:  does not match your user account.”
  1. remote: Processing changes: refs: 1, done
  2. remote:
  3. remote: ERROR: In commit 0059c6b3c1c60fcc3e7863fa62f7d19b0b69afcd
  4. remote: ERROR: committer email address joey.zhang@mail.com
  5. remote: ERROR: does not match your user account.
  6. remote: ERROR:
  7. remote: ERROR: The following addresses are currently registered:
  8. remote: ERROR: joe.chan@mail.com
  9. remote: ERROR:
  10. remote: ERROR: To register an email address, please visit:
  11. remote: ERROR: http://172.16.147.2:8082/#/settings/contact
  12. remote:
  13. remote:
  14. To ssh://gerritxmic/flagship.git
  15. ! [remote rejected] master -> master (invalid committer)
  16. error: failed to push some refs to ‘ssh://gerrit/test.git’

A2.需要配置 ‘Forge Committer’ 和 ‘Forge Author’ 访问权限, 让 Gerrit 忽略你不是正在 push 的提交的 author 或者 committer。直接把Anonymous Users组或者其他组给加上就行了。


 

——————— 本文来自 吉祥衰宝 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/npjocj/article/details/31735605?utm_source=copy

git push 错误:Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing unknown 5643da47ebc3c7800a9b61c0fc4d35a715292de6

git push 错误:

[2018-09-26 14:05:51,688] ERROR com.google.gerrit.sshd.BaseCommand : Internal server error (user jkadmin account 1000398) during git-receive-pack ‘/svnemm/emm.git’
com.google.gerrit.sshd.BaseCommand$Failure: fatal: Unpack error, check server log
at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:176)
at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:101)
at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:32)
at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:70)
at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:442)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:368)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Unpack error on project “svnemm/emm”:
AdvertiseRefsHook: org.eclipse.jgit.transport.AdvertiseRefsHookChain@1b821762class org.eclipse.jgit.transport.AdvertiseRefsHookChain

at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:175)
… 12 more
Caused by: org.eclipse.jgit.errors.UnpackException: Exception while parsing pack stream
at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:246)
at org.eclipse.jgit.transport.ReceivePack.receive(ReceivePack.java:161)
at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:115)
… 12 more
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing unknown 5643da47ebc3c7800a9b61c0fc4d35a715292de6
at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:148)
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:229)
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:840)
at org.eclipse.jgit.transport.BaseReceivePack.checkConnectivity(BaseReceivePack.java:1110)
at org.eclipse.jgit.transport.BaseReceivePack.receivePackAndCheckConnectivity(BaseReceivePack.java:884)
at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:192)
… 14 more

解决:
gerrit 操作 H2数据库:

java -jar bin/gerrit.war gsql

gerrit> \d
List of relations
TABLE_SCHEM | TABLE_NAME | TABLE_TYPE
————+—————————–+———–
PUBLIC | ACCOUNTS | TABLE
PUBLIC | ACCOUNT_DIFF_PREFERENCES | TABLE
PUBLIC | ACCOUNT_EXTERNAL_IDS | TABLE
PUBLIC | ACCOUNT_GROUPS | TABLE
PUBLIC | ACCOUNT_GROUP_BY_ID | TABLE
PUBLIC | ACCOUNT_GROUP_BY_ID_AUD | TABLE
PUBLIC | ACCOUNT_GROUP_MEMBERS | TABLE
PUBLIC | ACCOUNT_GROUP_MEMBERS_AUDIT | TABLE
PUBLIC | ACCOUNT_GROUP_NAMES | TABLE
PUBLIC | ACCOUNT_PATCH_REVIEWS | TABLE
PUBLIC | ACCOUNT_PROJECT_WATCHES | TABLE
PUBLIC | ACCOUNT_SSH_KEYS | TABLE
PUBLIC | CHANGES | TABLE
PUBLIC | CHANGE_MESSAGES | TABLE
PUBLIC | PATCH_COMMENTS | TABLE
PUBLIC | PATCH_SETS | TABLE
PUBLIC | PATCH_SET_ANCESTORS | TABLE
PUBLIC | PATCH_SET_APPROVALS | TABLE
PUBLIC | SCHEMA_VERSION | TABLE
PUBLIC | STARRED_CHANGES | TABLE
PUBLIC | SUBMODULE_SUBSCRIPTIONS | TABLE
PUBLIC | SYSTEM_CONFIG | TABLE

gerrit> select * from PATCH_SETS limit 3;
REVISION | UPLOADER_ACCOUNT_ID | CREATED_ON | DRAFT | CHANGE_ID | PATCH_SET_ID
—————————————–+———————+————————-+——-+———–+————-
0fd976c31660b2b55773fe0ba2c8e7a2a1266d4d | 1000000 | 2015-03-28 10:18:41.016 | N | 1 | 1
ae2bfa444bd384449a1feff32b3907da6a21b0db | 1000000 | 2015-03-28 10:22:32.739 | N | 2 | 1
67309f0999e5a7328fbd78e53de03a80bd814066 | 1000000 | 2015-03-28 10:23:18.7 | N | 2 | 2
(3 rows; 3 ms)
gerrit>

gerrit> select * from PATCH_SETS where REVISION=’5643da47ebc3c7800a9b61c0fc4d35a715292de6′;
REVISION | UPLOADER_ACCOUNT_ID | CREATED_ON | DRAFT | CHANGE_ID | PATCH_SET_ID
—————————————–+———————+————————-+——-+———–+————-
5643da47ebc3c7800a9b61c0fc4d35a715292de6 | 1000435 | 2018-08-03 12:38:59.203 | N | 27196 | 1
(1 row; 1 ms)

gerrit> select * from changes where change_id=27196;
CHANGE_KEY | CREATED_ON | LAST_UPDATED_ON | SORT_KEY | OWNER_ACCOUNT_ID | DEST_PROJECT_NAME | DEST_BRANCH_NAME | OPEN | STATUS | CURRENT_PATCH_SET_ID | SUBJECT | TOPIC | LAST_SHA1_MERGE_TESTED | MERGEABLE | ROW_VERSION | CHANGE_ID
——————————————+————————-+————————-+——————+——————+——————-+————————-+——+——–+———————-+———————————————————————————————————————+——-+——————————————+———–+————-+———-
I088052dd76b608ab89797e2c44114736a3a63721 | 2018-08-03 12:38:59.203 | 2018-08-03 12:38:59.203 | 004ef3b600006a3c | 1000435 | svnemm/emm | refs/heads/emm_209_FPJK | Y | n | 1 | 1. 通讯审计增加“通话总时长”、“主叫时长”、 “被叫时长” 、“主叫次数”、“被叫次数” 2. 列默认展示姓名、用户组、通话总时长、主叫时长、 被叫时长、主叫次数、被叫次数、查看记录共八列 3. 按照通话总时长从大到小正序排列 | NULL | c658deb824618f7bd1695d0e9d7274cf96254a15 | N | 102 | 27196
(1 row; 0 ms)

gerrit> update changes set open=’N’,status=’A’ where change_id=27196;
UPDATE 1; 22 ms
gerrit>

gerrit> \q
Bye
svn@git:~/gerrit/review_site$
svn@git:~/gerrit/review_site$
svn@git:~/gerrit/review_site$
svn@git:~/gerrit/review_site$ ./bin/gerrit.sh start
Starting Gerrit Code Review: OK

再提交就OK了:
[root@bogon emm.git]# git push –mirror ssh://jkadmin@192.168.1.29:29418/svnemm/emm.git
Counting objects: 278884, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (88342/88342), done.
Writing objects: 100% (278884/278884), 1.59 GiB | 54.90 MiB/s, done.
Total 278884 (delta 172642), reused 278884 (delta 172642)
remote: Resolving deltas: 100% (172642/172642)
remote: Counting objects: 278883, done
remote: Processing changes: refs: 15, done
To ssh://jkadmin@192.168.1.29:29418/svnemm/emm.git
+ 976df1f…3dd5fee master -> master (forced update)
* [new branch] emm_209 -> emm_209
* [new branch] emm_209_FPJK -> emm_209_FPJK
* [new branch] emm_209_GSDX -> emm_209_GSDX
* [new branch] emm_209_JBT -> emm_209_JBT
* [new branch] emm_209_LD -> emm_209_LD
* [new branch] emm_209_PAPH -> emm_209_PAPH
* [new branch] emm_209_QZXX -> emm_209_QZXX
* [new branch] emm_209_RDJC -> emm_209_RDJC
* [new branch] emm_209_SDHK -> emm_209_SDHK
* [new branch] emm_209_WXB -> emm_209_WXB
* [new branch] emm_209_XMNS -> emm_209_XMNS
* [new branch] emm_209_YTSD -> emm_209_YTSD
* [new branch] emm_209_hmjy -> emm_209_hmjy
* [new branch] feature_mgr_saas -> feature_mgr_saas
[root@bogon emm.git]#

 

相关链接:
https://blog.csdn.net/zwwjs/article/details/33723557
https://www.2cto.com/database/201501/370968.html
https://zhidao.baidu.com/question/1605326285565924027.html
https://dongyupu.github.io/2016/12/21/Gerrit-Gerrit-Code-Review-Unpack-error-Missing-unknown/

https://www.cnblogs.com/ZhangRuoXu/p/6483307.html

Git bare repository 的概念

要搞清这个概念,网上搜索一堆网页,中文的网页教程,没一个说得让人明白。而英文的,一看就明白。

这是一份很容易看懂的英文网页:What is a bare git repository?   地址:http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/

大意:

git init 创建的是一个工作目录,以下简称 A;git init –bare 创建的是一个空目录,以下简称 B。这两个目录的区别是:

A 里面有你工作用的文件,working tree,是指你工作用的文件的树目录结构。在 A 底下,还有一个 .git 子目录,里面就是 git 帮你管理的文件的历史版本信息。你在工作目录里编辑你的文件后,用 git 的 add, delete, commit,就是提交到这个子目录下。也就是说,git 帮你做的版本控制信息,其实就是保存在当前工作目录下的一个 .git 的子目录下。

B 里面只有 git 的版本控制信息,没有你工作用的文件,也就是没有 working tree。因为它不包含工作用的文件,只有 git 自己需要的文件,所以这个目录下没有 .git 子目录,而是直接把 git 需要的文件放根目录底下了。但是,这个 bare 的目录本身的目录名,有一个 .git 的后缀。

另外,用 git clone 从别的仓库克隆过来的本地文件夹,是工作目录,包含了工作用的文件。

而一个 bare repository 是用来“分享”的。如果有几个人要访问同一个项目的文件,在一个中心点上创建一个 bare 仓库,所有项目成员可以 push 自己编辑的文件到这个仓库。

因此,概念上,一个 bare 仓库,可以看成是一个 git 的文件服务器。一个人的项目,其实也可以建一个 bare 仓库,用做文件备份。这样自己的工作电脑彻底完蛋,你换台电脑,把项目从服务器上 clone 下来,就可以继续干活了。

所以,bare 仓库类似版本管理服务器,只存储版本管理的相关文件,不存储工作文件,因此里面没有工作目录。你要干活,必须从 bare 仓库克隆一个到本地的目录,然后在这个克隆的目录里面工作。

另外,如果你已经有了一个工作目录,但还没有被 git 管理起来,也是可以用 git 命令将它变成工作目录的。然后,你还可以把这个工作目录,和一个 bare 仓库,建立联系,方便将来 push 东西进去。

从 git 的角度来看,你提交的,是你对工作目录下的文件的改变,这个提交,其实只是把相关的内容,写入了你的工作目录下的那个被 git 管理的 .git 目录底下的文件里面。如果要把这些内容提交到一个 bare 仓库(通常是在一台服务器上,不过你要在工作电脑上另外建一个 bare 仓库,也不是不可以),就做一个 push 的操作,至于 push 到哪里,是访问那个 bare 仓库的 URL 路径问题。理论上,可以把一个工作目录,push 到几个不同的 bare 仓库里面,并不是一个工作目录只能对应一个远端的服务器。

———————

本文来自 pcplayer 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/pcplayer/article/details/72784096?utm_source=copy

服务器上的 Git – 在服务器上部署 Git

在服务器上部署 Git

开始架设 Git 服务器前,需要先把现有仓库导出为裸仓库 — 即一个不包含当前工作目录的仓库。做法直截了当,克隆时用 --bare 选项即可。裸仓库的目录名一般以 .git 结尾,像这样:

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

该命令的输出或许会让人有些不解。其实 clone 操作基本上相当于 git init 加 git fetch,所以这里出现的其实是 git init 的输出,先由它建立一个空目录,而之后传输数据对象的操作并无任何输出,只是悄悄在幕后执行。现在 my_project.git 目录中已经有了一份 Git 目录数据的副本。

整体上的效果大致相当于:

$ cp -Rf my_project/.git my_project.git

但在配置文件中有若干小改动,不过对用户来讲,使用方式都一样,不会有什么影响。它仅取出 Git 仓库的必要原始数据,存放在该目录中,而不会另外创建工作目录。

把裸仓库移到服务器上

有了裸仓库的副本后,剩下的就是把它放到服务器上并设定相关协议。假设一个域名为 git.example.com 的服务器已经架设好,并可以通过 SSH 访问,我们打算把所有 Git 仓库储存在 /opt/git 目录下。只要把裸仓库复制过去:

$ scp -r my_project.git user@git.example.com:/opt/git

现在,所有对该服务器有 SSH 访问权限,并可读取 /opt/git 目录的用户都可以用下面的命令克隆该项目:

$ git clone user@git.example.com:/opt/git/my_project.git

如果某个 SSH 用户对 /opt/git/my_project.git 目录有写权限,那他就有推送权限。如果到该项目目录中运行 git init 命令,并加上 --shared 选项,那么 Git 会自动修改该仓库目录的组权限为可写(译注:实际上 --shared 可以指定其他行为,只是默认为将组权限改为可写并执行 g+sx,所以最后会得到 rws。)。

$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared

由此可见,根据现有的 Git 仓库创建一个裸仓库,然后把它放上你和同事都有 SSH 访问权的服务器是多么容易。现在已经可以开始在同一项目上密切合作了。

值得注意的是,这的的确确是架设一个少数人具有连接权的 Git 服务的全部 — 只要在服务器上加入可以用 SSH 登录的帐号,然后把裸仓库放在大家都有读写权限的地方。一切都准备停当,无需更多。

下面的几节中,你会了解如何扩展到更复杂的设定。这些内容包含如何避免为每一个用户建立一个账户,给仓库添加公共读取权限,架设网页界面,使用 Gitosis 工具等等。然而,只是和几个人在一个不公开的项目上合作的话,仅仅是一个 SSH 服务器和裸仓库就足够了,记住这点就可以了。

小型安装

如果设备较少或者你只想在小型开发团队里尝试 Git ,那么一切都很简单。架设 Git 服务最复杂的地方在于账户管理。如果需要仓库对特定的用户可读,而给另一部分用户读写权限,那么访问和许可的安排就比较困难。

SSH 连接

如果已经有了一个所有开发成员都可以用 SSH 访问的服务器,架设第一个服务器将变得异常简单,几乎什么都不用做(正如上节中介绍的那样)。如果需要对仓库进行更复杂的访问控制,只要使用服务器操作系统的本地文件访问许可机制就行了。

如果需要团队里的每个人都对仓库有写权限,又不能给每个人在服务器上建立账户,那么提供 SSH 连接就是唯一的选择了。我们假设用来共享仓库的服务器已经安装了 SSH 服务,而且你通过它访问服务器。

有好几个办法可以让团队的每个人都有访问权。第一个办法是给每个人建立一个账户,直截了当但略过繁琐。反复运行 adduser 并给所有人设定临时密码可不是好玩的。

第二个办法是在主机上建立一个 git 账户,让每个需要写权限的人发送一个 SSH 公钥,然后将其加入 git 账户的 ~/.ssh/authorized_keys 文件。这样一来,所有人都将通过 git 账户访问主机。这丝毫不会影响提交的数据 — 访问主机用的身份不会影响提交对象的提交者信息。

另一个办法是让 SSH 服务器通过某个 LDAP 服务,或者其他已经设定好的集中授权机制,来进行授权。只要每个人都能获得主机的 shell 访问权,任何可用的 SSH 授权机制都能达到相同效果。