git错误大汇总

为了搭建gitosis,自己折腾了两天,碰到无数问题,那个郁闷,网络上的解答都是零散的,于是把它汇聚一起,并把自己的解决办法和思路放上来,或许有错漏。


1.Untracked working tree file 'external/broadcom/Android.mk' would be overwritten by merge.  Aborting

需要执行下面的命令才能修复:

 
    git reset --hard HEAD  
    git clean -f -d  
    git pull  

2.Please, commit your changes or stash them before you can merge.

如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:

git stash
git pull
git stash pop

然后可以使用git diff -w +文件名 来确认代码自动合并的情况.


反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:

git reset --hard
git pull

其中git reset是针对版本,如果想针对文件回退本地修改,使用

git checkout HEAD file/to/restore  


3.does not appear to be a git repository

路径错误,可以分别尝试绝对路径或者相对路径

如果是把另一个服务器的纯仓库弄到服务器,也会出现这种情况。我的临时做法是把另一个服务器的内容clone到本地服务器,然后在本地服务器创建纯仓库,放到repository的路径下,就可以了。有关这个错误,我在这篇文章里尝试寻找原因:

http://blog.csdn.net/xzongyuan/article/details/9366873

4.ERROR:gitosis.serve.main:Repository read access denied

修改本地gitosis-admin的gitosis-conf后(如下),push到仓库中,还会遇到该问题

[group customer]
members = nexus b
readonly = box_4.2

原因1 gitosis.conf写错:
gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = foo@bar,但keydir中的公密名却叫foo.pub
解决
使keydir的名称与gitosis中members所指的名称一致。

改为members = foo 或 公密名称改为foo@bar.pub


参考
http://blog.csdn.net/lixinso/article/details/6526643

注意,中间如果遇到这样的错误,很可能是gitosis.conf配置的不对
ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly

有可能是:
1. gitosis 中写的用户名,和keydir里面的key的名字没有完全对应上
2. 有的地方写错了,比如我把members写成了member,汗


原因2 地址错误:

虽然有时候,地址错误时,会提示did not apear to be a git repositry。但我也遇到这个错误,写错了相对路径,就会提示没有权限,因为gitosis.conf根本就没有这个文件的配置嘛。可以看看我的记录:

第一次,写错相对路径,自己不知道:

norton@norton-laptop:~/work$ git clone git@192.168.0.3:/repositories/gitosis-admin.git
Initialized empty Git repository in /home/norton/work/gitosis-admin/.git/
ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly

第二次,故意写个不存在的路径

norton@norton-laptop:~/work$ git clone git@192.168.0.3:/repositories/gitosis-admin.git2
Initialized empty Git repository in /home/norton/work/gitosis-admin.git2/.git/
ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly

第三次,写对相对路径。可见,相对路径的根目录是/home/git/repositories,记得不要多写了不必要的路径。提示一下,repositories是在初始化gitosis前就已经手动建立的,是一个软链接,链接到/home/repo。如果没做这一步,初始化的时候就会建立一个repositories文件夹,那么gitosis-admin这个仓库就会在这个实在的文件夹下,而不会通过软连接放到/home/repo中

norton@norton-laptop:~/work$ git clone git@192.168.0.3:gitosis-admin.git

Initialized empty Git repository in /home/norton/work/gitosis-admin/.git/
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.

原因3:开错账户

有时候,头脑不清醒了,就会弄错账户,所以犯这个错,要思考下是不是搞错账户了,在主帐号admin中,不断地测试下载,而我的目的其实是用b的帐号测试下载。如配置如下(并没有给admin读取teamwork的权限,而我却一直在clone teamwork)

[gitosis]

[group gitosis-admin]
members = admin
writable = gitosis-admin test

[group RK_Download]
members = b nexus
readonly = teamwork box_4.2 

~                                                                               
~                                   

测试结果

admin@admin:~/work/test$ git clone git@192.168.0.3:test.git
Initialized empty Git repository in /home/admin/work/test/test/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

admin@admin:~/work/test$ git clone git@192.168.0.3:teamwork.git
Initialized empty Git repository in /home/admin/work/test/teamwork/.git/
ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly

admin@admin:~/work/test$ git clone git@192.168.0.3:teamwork.git
Initialized empty Git repository in /home/admin/work/test/teamwork/.git/
ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly

admin@admin:~/work/test$ git clone git@192.168.0.3:teamwork.git
Initialized empty Git repository in /home/admin/work/test/teamwork/.git/
ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly 


刚记录完,又犯傻逼了,clone 了N次test,都不行,结果发现,自己根本没有把给b设定test的权限。再次说明头脑要清醒。

$ git clone git@192.168.0.3:test.git
Initialized empty Git repository in /tmp/test/.git/
ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly

修改后
Initialized empty Git repository in /tmp/teamwork/test/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

原因4: 不能写绝对路径

暂时不知道为啥,反正路径写了git@<Server IP>:/home/repo/xxx.git就会出现这个错误。貌似如果你如果密钥验证失败,要求你输入密码的情况下,是输入绝对路径的,而如果密钥验证成功,输入绝对路径,它就不认了。我想,这是为了保证系统安全,不让客户端用git账户乱clone不在repositories下的文件,即限定在repositories下了,所以只能用相对路径。

5.SSH: The authenticity of host <host> can't be established

This message is just SSH telling you that it's never seen this particular host key before, so it isn't able to truly verify that you're connecting to the host you think you are. When you say "Yes" it puts the ssh key into your known_hosts file, and then on subsequent connections will compare the key it gets from the host to the one in the known_hosts file.

There was a related article on stack overflow showing how to disable this warning,http://stackoverflow.com/questions/3663895/ssh-the-authenticity-of-host-hostname-cant-be-established.



6.unrecognized command 'gitosis-serve b' && 每次登录要求输入密码

$ git clone git@192.168.0.3:/home/repo/teamwork.git
Initialized empty Git repository in /home/b/work/teamwork/.git/
fatal: unrecognized command 'gitosis-serve b'
fatal: The remote end hung up unexpectedly

遇到这个问题,b是我一个普通账户,而另一个admin每次登录都要求输入密码(ssh有两种登录方式:要求输入密码,和不需要输入密码——利用密钥),我就怀疑,gitosis的配置已经给我弄乱了,所以无法识别正确的密钥。
这个时候,我已经改了好多次密钥对,gitosis已经配置过好多次。通过gitosis-init是不会修复该问题的,于是,我删掉/home/git/下和repository有关的文件夹,包括.ssh下的authoritykey。还要删掉在/home/repo下的gitosis-admin.git。这样重新gitosis-init一下,就可以了。


如果server端的/etc/passwd中git的账户设置中,git使用的是/usr/bin/git-shell,而不是/bin/sh,也会报这个错误。


7.Agent admitted failure to sign using the key.

通过图形界面切换到b用户时,遇到这个问题,在原来到界面中,su b是可以clone的。


解決方式 使用 ssh-add 指令将私钥 加进来 (根据个人的密匙命名不同更改 id_rsa)
# ssh-add   ~/.ssh/id_rsa 

### 回答1: 将大型项目推送到Git仓库需要一些特殊的注意事项。首先,我们应该将项目进行合理的拆分,将功能模块或子系统分别推送上Git。这样可以提高代码管理的灵活性,从而方便团队成员的协作开发。其次,我们应该进行适当的版本控制,使用分支和标签等功能来管理不同的开发版本。这样可以方便地回溯历史版本,并进行bug修复和功能优化等工作。最后,我们还应该制定详细的开发规范和流程,包括代码审查、测试、发布等环节。这样可以确保代码质量和项目进度的控制。需要注意的是,在推送大型项目之前,我们应该先进行一次完整的初始化,将项目的代码、资源、配置文件等全部提交到Git仓库。然后,我们可以根据项目的特点和需求,选择合适的Git工作流程,如Git Flow或GitHub Flow等。最后,为了确保项目的安全性和稳定性,我们还应该定期备份和维护Git仓库,并制定一套合理的权限管理机制,限制非授权人员对代码的访问和修改。总之,将大型项目推送到Git是一个需要谨慎考虑的过程,它需要我们综合考虑项目规模、团队规模、技术难度等多方面因素,保证代码管理的高效性和可靠性。 ### 回答2: 将idea太大的项目推上git是一个明智的决策,因为git是一个强大的版本控制系统,能够帮助我们轻松管理项目的变更和合作开发。 首先,通过将项目推上git,我们能够方便地跟踪项目的历史记录。无论是项目的整体架构设计,还是每个具体功能的开发进展,我们都可以在git的提交历史中找到相关的变更。这使得我们能够更好地回顾项目的发展轨迹,识别问题,并进行必要的调整。 其次,git的分支功能使得项目的并行开发变得更加容易。通过创建不同的分支,不同的团队成员可以在不同的功能块上独立开发,而不会相互干扰。而且,git还提供了简单而强大的合并功能,可以轻松地将不同分支的代码汇总到主线上。这有助于项目的快速迭代,提高开发效率。 另外,git也是一个优秀的代码协作工具。通过使用git,我们能够方便地与其他团队成员分享代码,并进行代码审查和反馈。这有助于避免代码冲突和错误,并促进团队合作和知识共享。 最后,git的分布式特性为项目的备份和恢复提供了便利。通过将项目推上git,我们可以将代码和历史记录保存在多个地方,以防止数据丢失。即使在本地发生了意外情况,我们仍然可以轻松地恢复项目到任意历史版本。 总的来说,将idea太大的项目推上git能够带来许多好处,包括更好地跟踪项目历史、方便的并行开发、协作和代码审查以及可靠的备份和恢复。因此,推荐将大项目推上git,以提高项目开发的效率和质量。 ### 回答3: 将一个想法或者一个大型项目推上Git可以带来多方面的好处。首先,Git是一个版本控制系统,它可以跟踪和管理项目的不同版本,允许多人协同开发,并且可以方便地回滚到之前的版本。使用Git可以有效地组织和管理项目的代码,使得团队间的合作更加高效。 其次,将项目推上Git可以为其他人提供使用和贡献的机会。通过共享项目代码,其他人可以更容易地了解和理解项目的内容和目标。他们可以提供反馈、建议和改进,从而提高项目的质量和可靠性。这样的开放性和透明性也有助于增加项目的吸引力,吸引更多的人加入进来,进一步推动项目的发展。 另外,Git还提供了一个便捷的方式来备份项目代码。通过将项目推上Git,可以保留项目的各个版本和历史记录。即使出现了一些错误或者丢失了某些文件,也可以方便地回滚到之前的版本,避免数据的丢失和损坏。这为项目的稳定性和持续性提供了一个保障。 总之,将一个想法或者一个大型项目推上Git可以提供版本控制、协同开发、共享和备份的便利。通过Git的工具和功能,项目可以更加高效、可靠地进行开发和管理。这对于项目的成功和持续性至关重要,也为项目的发展带来了更多的机遇。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值