为github添加多账号ssh

由于一些原因,我新建了一个github账户另作他用,但是在导入密钥的时候,github提示“Key is already in use”,想想确实也有理,不同的账户怎么可能有相同的密钥呢。 于是我在网上查找了一些资料,设置完毕,贴出步骤以备忘。

1. 新建一个ssh

因为在公钥里面会体现出个人邮箱信息,所以在生成密钥时可以输入自己的注册邮箱,当然这个不是必须的。

cd ~/.ssh ssh-keygen -t rsa -C “xxxx@gmail.com”

要求输入文件名时输入id_rsa_xxxx 执行结束后就会得到id_rsa_xxxxid_rsa_xxxx.pub两个文件. 这个公私钥是我们自己建立的,系统会认为这个文件是普通文件,为了让系统认识这两个文件,还需要使用ssh-add进行添加。

利用脚本快速提交并推送自己的分支到devel

工作中使用git管理代码,每个团队成员使用自己的分支,各项将自己分支的代码提交到devel分支上。每次重复操作总是讨厌的,所以写了个脚本完成此事,非常方便。

下面是我的脚本命令,各路看官可以根据自己需要改成适合自己的,下面是我的pushdevel.sh:

[c]
cd /home/wangminli/yourProc &&
/usr/bin/git checkout yourbranch &&
/usr/bin/git add . &&
/usr/bin/git commit -m "$1" &&
/usr/bin/git checkout devel &&
/usr/bin/git pull &&
/usr/bin/git checkout yourbranch &&
/usr/bin/git rebase devel &&
echo "==>:成功rebase到devel分支!\n"
/usr/bin/git checkout devel &&
echo "==>:成功与yourbranch分支merge\n"
/usr/bin/git merge yourbranch &&
/usr/bin/git push &&!
echo "==>:成功push\n"
/usr/bin/git checkout yourbranch &&
echo "==>:成功完成所有操作,已切换到yourbranch分支!\n"
[/c]

当然,这个命令集还不能包治百病,如遇到冲突等退出操作等,这就用到hooks的功能了,git的之前版本有个pre-merge的hook的,后来去掉了.。先挖坑,具体操作待我实践过后填坑。

git创建多个远程仓库

缘起

自从Google被墙了后,Chrome的书签在公司和家里两台电脑上完全分裂了,于是写了一个小东西在线备份书签。我将该应用部署在了coding.net上,使用的恰好是git,非常方便。但由于这是刚刚成立不久的一个平台,唯恐生命周期短暂,自己的东西可就遭殃了,还是备份一份到github上比较好。但github只提供代码托管,没有部署功能。要是有git支持多个远程仓库就好了,研究了下,git早就提供了这样的功能,而且很简单,还很方便。

正文

搭建git服务器出现insufficient permission … database ./objects的解决

尝试搭建一个git服务器,本地分支推送到远程服务器上时出现了下面的错误:

[c]

wangminli@debian:~/myproject$ git remote add origin git@xxx.xxx.xxx.xxx:/opt/git/project.git

 

wangminli@debian:~/myproject$ git push origin master
git@115.28.86.226′s password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 214 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
<strong>error: insufficient permission for adding an object to repository database ./objects</strong>

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To git@115.28.86.226:/opt/git/project.git
! [remote rejected] master -> master (n/a (unpacker error))
error: 无法推送一些引用到 ‘git@115.28.86.226:/opt/git/project.git’

[/c]

搭建git远程服务器

gitpic

搭建git远程服务器


在公司里使用git进行代码管理,犯了很多错后,深深的体会到git的强大。尽管可以比较顺畅的使用git了,但也只停留在使用它提交代码上,并不了解git服务器是如何创建的,也不清楚本地分支是如何关联到远程分支的。这个疑问一只萦绕在心头,今天有空,决定将这一课补上。查找了一些资料后,有所收获,记录以备忘。

声明:这是我试用可行的一种方案,并没有系统的研究各种方案的可行性,如您有更好的方案,请告知,谢谢!

git reset和git checkout恩怨大结局

resetcheckout

学习git时,reset和checkout这俩好基友应该算是遇到的比较难缠的拦路虎。如果你向我一样健忘,长时间没接触到它们,想必它们也会经常自动找上门来,惊扰你一番。这次有时间有心情,觉得有必要跟它们来个了结了。

git reset 和git checkout的主要区别在于:

(1)实现方式不同

reset修改的是master指向,并没有修改HEAD;

而checkout修改的是HEAD指向,master并没有动。

(2)用途不同

reset翻译为“重置”,网上一些文章也翻译为“恢复”,它有修改的意思,事实上也正是如此,它常用来更正错误,如某次提交有错,想撤销这次提交,暂存区有错,想重置暂存区等;

checkout翻译为“检出”,它的功能主要是撤换当前的工作环境,如切换工作分支,也可以修改用暂存区的内容覆盖工作区的内容,也起到修改的作用。

(3)主要的作用对象不同

gitpic

reset的作用对象主要是暂存区

Git跟踪一个文件的提交历史记录

这个问题困扰了好久。有时候时间长了,不知道某一个文件究竟做了哪些改动,一直认为使用“ git diff”加参数可以解决这个问题,但它只针对工作区、暂存区和版本库之间的提交比较差异。

单个文件自身提交的比较可以使用下面的命令来解决:

[c]git log -p filename[/c]

该命令可以查看文件名为filename的提交历史,以及每次提交历史的改动差异。

“git log -p <path>…” shows commits that touch the specified paths, and diffs about the same
specified paths.

还有一个命令:

[c]git blame filename[/c]

可以显示这个文件的每一行的最后提交commit,方便定位commit

 

查看文件提交细节

可以使用git log和git show配合使用,查看提交内容添加了什么,删除了什么等。