Linux git 多人协助开发实战

git 服务器搭建
	创建公钥,准备免密登录
	初始化一个版本库
	git clone 

git客户端
	查看git状态
	创建一个文件
	添加到暂缓区
	提交到版本库
	查看git日志
	checkout 从缓存区恢复文件到工作区
	reset 版本区恢复到缓存区
	查看git日志
	reset --hard 工作区,缓存区被版本库重置
	查看工作区与缓存区的差异
	查看缓存区与版本库的差异
	查看工作区与版本库的差异
	演示git状态,精简状态
	删除版本库的文件
	从版本库恢复文件
	查看文件提交的历史信息,便于bug追踪
	branch 分支创建
	branch 分支切换
	分支删除
	强制删除分支
	先删除本地分支,再删除远程版本库对应的分支
	[merge分支合并],排版可能会冲突
	版本标记
	版本回退

[github]联网操作
	项目创建
	推送到远程服务器:
	多人协助开发
	免密配置

git服务器搭建

[在git服务器的操作]安装git服务,创建git用户

sudo apt-get install git
sudo adduser git

[在git客户端的操作],创建公钥,准备免密登录

chunli~魂斗罗 ssh-keygen -t rsa -P ‘‘
cat ~/.ssh/id_rsa.pub 
ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxx8********************

[在git服务器的操作]把客户端的公钥传到git服务器

su - git
Password: git
[email protected]:~$ mkdir .ssh
[email protected]:~$ cd .ssh/
[email protected]:~/.ssh$ touch authorized_keys
[email protected]:~/.ssh$ echo "ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxx8********************" >> authorized_keys

[在git客户端的操作],测试,出现登录提示

ssh [email protected]

[在git服务器的操作],初始化一个版本库

[email protected]:~$ git init --bare my_git/
Initialized empty Git repository in /home/git/my_git/
[email protected]:~$ echo $?
0
[email protected]:~$ ll my_git/
total 40
drwxrwxr-x 7 git git 4096 Sep 24 12:07 ./
drwxr-xr-x 5 git git 4096 Sep 24 12:06 ../
drwxrwxr-x 2 git git 4096 Sep 24 12:07 branches/
-rw-rw-r-- 1 git git   66 Sep 24 12:07 config
-rw-rw-r-- 1 git git   73 Sep 24 12:07 description
-rw-rw-r-- 1 git git   23 Sep 24 12:07 HEAD
drwxrwxr-x 2 git git 4096 Sep 24 12:07 hooks/
drwxrwxr-x 2 git git 4096 Sep 24 12:07 info/
drwxrwxr-x 4 git git 4096 Sep 24 12:07 objects/
drwxrwxr-x 4 git git 4096 Sep 24 12:07 refs/
[email protected]:~$


[在git客户端的操作],git clone 

chunli~魂斗罗 git clone [email protected]:~/my_git
Cloning into ‘my_git‘...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.


git客户端常用操作


查看git状态

chunli~魂斗罗 cd my_git/
chunli~魂斗罗 git status
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)

手动创建一个文件,再查看status

chunli~魂斗罗 vim main.c
chunli~魂斗罗 cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
chunli~魂斗罗 

chunli~魂斗罗 git status
On branch master
Initial commit
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	main.c
nothing added to commit but untracked files present (use "git add" to track)



添加到暂缓区

chunli~魂斗罗 git add main.c

提交到版本库

chunli~魂斗罗~/work/my_git$ git commit -m "wrote a new file"

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

to set your account‘s default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got ‘[email protected](none)‘)
chunli~魂斗罗~/work/my_git$ 

解决办法,
chunli~魂斗罗~/work/my_git$ git config --global user.email "[email protected]"
chunli~魂斗罗~/work/my_git$ git config --global user.name "chunli"

[提交文件]可以提交成功了
chunli~魂斗罗~/work/my_git$ git commit -m "wrote a new file"
[master (root-commit) a5f6b95] wrote a new file
 1 file changed, 6 insertions(+)
 create mode 100644 main.c


查看git状态

chunli~魂斗罗~/work/my_git$ git status
On branch master
Your branch is based on ‘origin/master‘, but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

nothing to commit, working directory clean
chunli~魂斗罗~/work/my_git$

[查看git日志]

chunli~魂斗罗~/work/my_git$ git log
commit a5f6b9506e18057ee95e98852c56a31d5280a433
Author: chunli <[email protected]>
Date:   Sat Sep 24 13:28:06 2016 +0800

    wrote a new file
chunli~魂斗罗~/work/my_git$

[checkout 从缓存区恢复文件到工作区]

chunli~魂斗罗~/work/my_git$ vim main.c 
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	//哈哈这是我的修改
	printf("Hello World!\n");
	return 0;
}

开始回退:
chunli~魂斗罗~/work/my_git$ git checkout a5f6 main.c
跟上commit的掐前几位就可以,commit a5f6b9506e18057ee95e98852c56a31d5280a433

chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
chunli~魂斗罗~/work/my_git$


reset 版本区恢复到缓存区

2,环境:工作区,缓存区,版本区一致:
chunli~魂斗罗~/work/my_git$ git status -s

3,修改工作区的文件:
chunli~魂斗罗~/work/my_git$ vim main.c

4,工作区提交到缓存区
chunli~魂斗罗~/work/my_git$ git add main.c 

5,查看版本区与缓存区的差异:
chunli~魂斗罗~/work/my_git$ git diff --cached main.c
diff --git a/main.c b/main.c
index 6eea5e1..1794ffc 100644
--- a/main.c
+++ b/main.c
@@ -1,7 +1,6 @@
 #include <stdio.h>
 int main()
 {
-       //我的注释
        printf("Hello World!");
        return 0;
 }
chunli~魂斗罗~/work/my_git$ 

chunli~魂斗罗~/work/my_git$ git status -s
M  main.c
chunli~魂斗罗~/work/my_git$ 

6,将版本区恢复到缓存区:
chunli~魂斗罗~/work/my_git$ git reset main.c
Unstaged changes after reset:
M	main.c

chunli~魂斗罗~/work/my_git$ git status -s
 M main.c
chunli~魂斗罗~/work/my_git$ 
chunli~魂斗罗~/work/my_git$ git checkout  main.c
chunli~魂斗罗~/work/my_git$ git status -s
chunli~魂斗罗~/work/my_git$ 

版本再一次恢复到一致

reset --hard 工作区,缓存区被版本库重置

1,为了演示,我把文件直接删除
chunli~魂斗罗~/work/my_git$ rm main.c 
chunli~魂斗罗~/work/my_git$ cat main.c
cat: main.c: No such file or directory

2,开始重置
chunli~魂斗罗~/work/my_git$ git reset --hard HEAD
HEAD is now at 682d029 第三次update
3,测试,文件果然回来了
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	//我的注释
	printf("Hello World!");
	return 0;
}
chunli~魂斗罗~/work/my_git$

[查看工作区与缓存区的差异]

chunli~魂斗罗~/work/my_git$ git diff
当前没有差异:

那我就把文件修改一下:
chunli~魂斗罗~/work/my_git$ vim main.c 
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	//我的注释
	printf("Hello World!");
}

再看看diff的描述,彩色的,多一行,少一行,显示的很清楚
chunli~魂斗罗~/work/my_git$ git diff
diff --git a/main.c b/main.c
index 89b92aa..1d24e22 100644
--- a/main.c
+++ b/main.c
@@ -1,6 +1,6 @@
 #include <stdio.h>
 int main()
 {
-       printf("Hello World!\n");
-       return 0;
+       //我的注释
+       printf("Hello World!");
 }
chunli~魂斗罗~/work/my_git$


查看缓存区与版本库的差异

1,提交任务到暂缓区
chunli~魂斗罗~/work/my_git$ git add main.c 

chunli~魂斗罗~/work/my_git$ git diff --cached
diff --git a/main.c b/main.c
index 89b92aa..1d24e22 100644
--- a/main.c
+++ b/main.c
@@ -1,6 +1,6 @@
 #include <stdio.h>
 int main()
 {
-       printf("Hello World!\n");
-       return 0;
+       //我的注释
+       printf("Hello World!");
 }
chunli~魂斗罗~/work/my_git$


[查看工作区与版本库的差异]

chunli~魂斗罗~/work/my_git$ git diff HEAD
diff --git a/main.c b/main.c
index 89b92aa..1d24e22 100644
--- a/main.c
+++ b/main.c
@@ -1,6 +1,6 @@
 #include <stdio.h>
 int main()
 {
-       printf("Hello World!\n");
-       return 0;
+       //我的注释
+       printf("Hello World!");
 }
chunli~魂斗罗~/work/my_git$


第二次提交

1,提交
chunli~魂斗罗~/work/my_git$ git commit -m "第二次提交" main.c 
[detached HEAD cc0c421] 第二次提交
 1 file changed, 2 insertions(+), 2 deletions(-)

2,查看git状态

chunli~魂斗罗~/work/my_git$ git status 
HEAD detached from a5f6b95
nothing to commit, working directory clean

3,查看git日志

chunli~魂斗罗~/work/my_git$ git log
commit cc0c4219374ed151c4d91cc8fcf9a07fa2745003
Author: chunli <[email protected]>
Date:   Sat Sep 24 13:45:38 2016 +0800

    第二次提交

commit a5f6b9506e18057ee95e98852c56a31d5280a433
Author: chunli <[email protected]>
Date:   Sat Sep 24 13:28:06 2016 +0800

    wrote a new file

chunli~魂斗罗~/work/my_git$


[演示git状态,精简状态]

1,把本地文件稍作修改
chunli~魂斗罗~/work/my_git$ vim main.c 
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	//我的注释
	printf("Hello World!");
	return 0;
}
chunli~魂斗罗~/work/my_git$ 

2,查看git状态
chunli~魂斗罗~/work/my_git$ git status
HEAD detached from a5f6b95
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   main.c

no changes added to commit (use "git add" and/or "git commit -a")

3,精简显示git状态,注意M左右的空格
chunli~魂斗罗~/work/my_git$ git status  -s
 M main.c

4,把任务推到暂缓区 
chunli~魂斗罗~/work/my_git$ git add main.c 

5,精简显示git状态,注意M左右的空格
chunli~魂斗罗~/work/my_git$ git status  -s
M  main.c

6,查看git状态
chunli~魂斗罗~/work/my_git$ git status 
HEAD detached from a5f6b95
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   main.c

chunli~魂斗罗~/work/my_git$ 
7,提交任务到版本区
chunli~魂斗罗~/work/my_git$ git commit -m "第三次update" main.c 
[detached HEAD 682d029] 第三次update
 1 file changed, 1 insertion(+)

8,查看git状态 
chunli~魂斗罗~/work/my_git$ git status 
HEAD detached from a5f6b95
nothing to commit, working directory clean

9,精简显示git状态
chunli~魂斗罗~/work/my_git$ git status -s
chunli~魂斗罗~/work/my_git$

[删除版本库的文件]

chunli~魂斗罗~/work/my_git$ git rm main.c 
rm ‘main.c‘
chunli~魂斗罗~/work/my_git$ ls -l
total 0
chunli~魂斗罗~/work/my_git$ git commit -m "rm main.c"
[detached HEAD e828b0a] rm main.c
 1 file changed, 7 deletions(-)
 delete mode 100644 main.c
chunli~魂斗罗~/work/my_git$ git status -s
chunli~魂斗罗~/work/my_git$ ll
total 0
chunli~魂斗罗~/work/my_git$ 
chunli~魂斗罗~/work/my_git$ git log
commit e828b0ae6a6de63f705d6626177e3c4a358c9b9c
Author: chunli <[email protected]>
Date:   Sat Sep 24 14:18:48 2016 +0800

    rm main.c

[查看文件提交的历史信息,便于bug追踪]

1,源文件
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!");
	return 0;
}
chunli~魂斗罗~/work/my_git$ 
2,添加到缓存区
chunli~魂斗罗~/work/my_git$ git add main.c 
3,提交
chunli~魂斗罗~/work/my_git$ git commit -m "test 1 blame"
[detached HEAD f8b06fe] test 1 blame
 1 file changed, 1 insertion(+), 2 deletions(-)
4,查看文件历史,可以看到 printf("Hello World!\n");发生了变动
chunli~魂斗罗~/work/my_git$ git blame  main.c
3983d686 (chunli 2016-09-24 14:26:08 +0800 1) #include <stdio.h>
3983d686 (chunli 2016-09-24 14:26:08 +0800 2) int main()
3983d686 (chunli 2016-09-24 14:26:08 +0800 3) {
f8b06fe0 (chunli 2016-09-24 14:28:09 +0800 4)   printf("Hello World!\n");
3983d686 (chunli 2016-09-24 14:26:08 +0800 5)   return 0;
3983d686 (chunli 2016-09-24 14:26:08 +0800 6) }
chunli~魂斗罗~/work/my_git$


[branch 分支创建]

1,查看分支
chunli~魂斗罗~/work/my_git$ git branch 
* (detached from a5f6b95)
  master
chunli~魂斗罗~/work/my_git$ 

2,创建分支:
chunli~魂斗罗~/work/my_git$ git checkout  -b dev
Switched to a new branch ‘dev‘
chunli~魂斗罗~/work/my_git$ git branch 
* dev
  master
chunli~魂斗罗~/work/my_git$ 
3,修改代码并保存:
chunli~魂斗罗~/work/my_git$ echo ‘// git checkout  -b dev ‘ >> main.c 
chunli~魂斗罗~/work/my_git$ git add main.c 
chunli~魂斗罗~/work/my_git$ git commit -m "git checkout  -b dev"
[dev 670315e] git checkout  -b dev
 1 file changed, 1 insertion(+)
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
// git checkout  -b dev 
chunli~魂斗罗~/work/my_git$

[branch 分支切换]

1,查看当前处于哪个分支?
chunli~魂斗罗~/work/my_git$ git branch 
* dev
  master
2,分支切换
chunli~魂斗罗~/work/my_git$ git checkout master 
Switched to branch ‘master‘
Your branch is based on ‘origin/master‘, but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)
3,查看代码状态  
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
chunli~魂斗罗~/work/my_git$

分支删除,如果没有合并,就失败:git branch -d newbranch 

强制删除分支:git branch -D newbranch

先删除本地分支,再删除远程版本库对应的分支 git push origin :newbranch



[merge分支合并],排版可能会冲突

1,查看当前所在分支
chunli~魂斗罗~/work/my_git$ git branch 
  dev
* master
2,查看当前分支下的源代码
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
3,分支合并
chunli~魂斗罗~/work/my_git$ git merge dev
Updating a5f6b95..670315e
Fast-forward
 main.c | 1 +
 1 file changed, 1 insertion(+)
 
4,查看合并的结果
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
// git checkout  -b dev 
chunli~魂斗罗~/work/my_git$ 

5,添加->提交
chunli~魂斗罗~/work/my_git$ git add main.c 
chunli~魂斗罗~/work/my_git$ git commit -m "merge" 
On branch master
Your branch is based on ‘origin/master‘, but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

nothing to commit, working directory clean
6,我的提交报错了

chunli~魂斗罗~/work/my_git$ git branch --unset-upstream
chunli~魂斗罗~/work/my_git$ echo $?
0

chunli~魂斗罗~/work/my_git$ git commit -m "merge" 
On branch master
nothing to commit, working directory clean
chunli~魂斗罗~/work/my_git$ git branch 
  dev
* master
7,查看git状态:
chunli~魂斗罗~/work/my_git$ git status  -s
chunli~魂斗罗~/work/my_git$


版本标记

chunli~魂斗罗~/work/my_git$ git tag -m "ver1.0" my_hello
chunli~魂斗罗~/work/my_git$ git status -s

chunli~魂斗罗~/work/my_git$ vim main.c 
chunli~魂斗罗~/work/my_git$ git add main.c 
chunli~魂斗罗~/work/my_git$ git commit  -m "add main.c" main.c 
[master 24a704a] add main.c
 1 file changed, 1 deletion(-)
chunli~魂斗罗~/work/my_git$ 
chunli~魂斗罗~/work/my_git$ git tag -m "ver2.0" my_hello2.0
chunli~魂斗罗~/work/my_git$ git tag -l 
my_hello
my_hello2.0
chunli~魂斗罗~/work/my_git$ git tag -l -n
my_hello        ver1.0
my_hello2.0     ver2.0

[版本回退]

1,查看当前版本的代码
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
2,版本退回
chunli~魂斗罗~/work/my_git$ git checkout my_hello
Note: checking out ‘my_hello‘.

You are in ‘detached HEAD‘ state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 670315e... git checkout  -b dev
chunli~魂斗罗~/work/my_git$ echo $?
0
3,查看代码
chunli~魂斗罗~/work/my_git$ cat main.c 
#include <stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
// git checkout  -b dev 
chunli~魂斗罗~/work/my_git$ 

4,查看tag
chunli~魂斗罗~/work/my_git$ git tag -l -n1
my_hello        ver1.0
my_hello2.0     ver2.0

5,查看分支与tag,我位于tag上,没有在分支上
chunli~魂斗罗~/work/my_git$ git branch 
* (detached from my_hello)
  dev
  master
chunli~魂斗罗~/work/my_git$

[github]联网操作



登陆:https://github.com/login

账号:[email protected]

密码:*****Z!`****************

点击有上角的设置按钮,选择[Your profile],出现新的页面

点击右上角的加号图标,选择[New repository]

对应[Repository name]自己填,我写[chunli_dev]

对应[Description (optional)]随便写,我写[chunli C/C++ dev]

Public免费

Private收费

勾选[Initialize this repository with a README]

点击[Create Repository]

可以找到一个连接[https://github.com/990487026/chunli_dev.git]


[从github克隆到本地]

chunli~魂斗罗~$ mkdir github_test
chunli~魂斗罗~$ cd github_test
chunli~魂斗罗~/github_test$ git clone https://github.com/990487026/chunli_dev
chunli~魂斗罗~/github_test$ tree
.
└── chunli_dev
    └── README.md
1 directory, 1 file
chunli~魂斗罗~/github_test$

修改本地文件

chunli~魂斗罗~/github_test$ cd chunli_dev/
chunli~魂斗罗~/github_test/chunli_dev$ vim README.md 
chunli~魂斗罗~/github_test/chunli_dev$ git add README.md 
chunli~魂斗罗~/github_test/chunli_dev$ git commit -m "mod readme"
[master 74616c0] mod readme
 1 file changed, 1 insertion(+)
chunli~魂斗罗~/github_test/chunli_dev$

继续修改:

chunli~魂斗罗~/github_test/chunli_dev$ vim main.c
chunli~魂斗罗~/github_test/chunli_dev$ cp main.c a.c 
chunli~魂斗罗~/github_test/chunli_dev$ cp main.c b.c 
chunli~魂斗罗~/github_test/chunli_dev$ cp main.c d.c 

chunli~魂斗罗~/github_test/chunli_dev$ git commit -m "create 3 file"
[master d23a982] create 3 file
 4 files changed, 24 insertions(+)
 create mode 100644 a.c
 create mode 100644 b.c
 create mode 100644 d.c
 create mode 100644 main.c
chunli~魂斗罗~/github_test/chunli_dev$

推送到远程服务器:

chunli~魂斗罗~/github_test/chunli_dev$ git push -u origin master
Username for ‘https://github.com‘: [email protected]
Password for ‘https://[email protected]@github.com‘: 
Counting objects: 5, done.
Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/990487026/chunli_dev
   fe6ea24..74616c0  master -> master
Branch master set up to track remote branch master from origin.
chunli~魂斗罗~/github_test/chunli_dev$ echo $?
0
chunli~魂斗罗~/github_test/chunli_dev$



验证:

浏览器查看:https://github.com/990487026/chunli_dev

可以看到刚修改的readme文件内容



直接在github网页修改代码,把代码 git pull下来

chunli~魂斗罗~/github_test/chunli_dev$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/990487026/chunli_dev
   d23a982..74de7b3  master     -> origin/master
Updating d23a982..74de7b3
Fast-forward
 a.c | 7 +++++++
 1 file changed, 7 insertions(+)
chunli~魂斗罗~/github_test/chunli_dev$ 
验证:
chunli~魂斗罗~/github_test/chunli_dev$ cat a.c 
#include <stdio.h>
int main()
{
	printf("Hello World\n");
	printf("Hello World\n");
	printf("Hello World\n");
	printf("Hello World\n");
	printf("Hello World\n");
	printf("Hello World\n");

	printf("Hello World\n");
	return 0;
}
chunli~魂斗罗~/github_test/chunli_dev$

多人协助开发,将一个项目添加多人


每个人授权后,都去clone

git clone  https://github.com/990487026/chunli_dev



然后各种修改,用各个的账户密码push

添加:git add *
提交:git commit -m "add file"
推送:git push https://github.com/990487026/chunli_dev
每个人输入自己的账户密码
验证:浏览器打开:https://github.com/990487026/chunli_dev
可以看到push的效果



免密配置:

我的主机:

chunli~魂斗罗~$ cat .ssh/id_rsa.pub 

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCeQ0+r2Oks+VX2SHBnbtNvm8uX6Vh3T6wCs7n1fjvhcMPjtZj2vWn6SuWsQiXYAglChgxHO4ixEkzjpVPu3nrjx/jmKVAKSqsRmrDrbR5CtJXg0P2YbKqqD1dx5hdGcGM1TNv1C4sBkictyfmpn+4TPZRWAgkvIm3wWgrYy2o0nEdt69z8VUGBLf0tFyn5mHt7w4p4qHeSIDdzTFtjI31ilceNzSz9UCPCbptPAk08ObU5LhPb5EqOjV1QfnmA7ymR2b0Ys9zO/FytvHgwk7uiTvKaFQS/CSlg+a5uNQHCryr1FhyqkmBHDga7R9HkoPLJ5W9LhqAm1kfNy1tk+QEP [email protected]


把公钥传到github


把github 项目clone下来:

chunli~魂斗罗~/github_test$ git clone  https://github.com/990487026/chunli_dev
chunli~魂斗罗~/github_test$ cd chunli_dev/

修改配置文件:

chunli~魂斗罗~/github_test/chunli_dev$ vim .git/config 
将:url = https://github.com/990487026/chunli_dev
换:url = [email protected]:990487026/chunli_dev

修改文件,演示免密推送

chunli~魂斗罗~/github_test/chunli_dev$ vim main.c
chunli~魂斗罗~/github_test/chunli_dev$ git add *
chunli~魂斗罗~/github_test/chunli_dev$ git commit -m "change main.c "
chunli~魂斗罗~/github_test/chunli_dev$ git push -u origin master 
Warning: Permanently added the RSA host key for IP address ‘192.30.253.113‘ to the list of known hosts.
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 321 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
To [email protected]:990487026/chunli_dev
   74de7b3..2297efc  master -> master
Branch master set up to track remote branch master from origin.
chunli~魂斗罗~/github_test/chunli_dev$ echo $?
0
chunli~魂斗罗~/github_test/chunli_dev$

验证看图:5

忽略二进制文件:

chunli~魂斗罗~/github_test/chunli_dev$ vim .getignore
chunli~魂斗罗~/github_test/chunli_dev$ cat .getignore
*.o
chunli~魂斗罗~/github_test/chunli_dev$ touch haha.o
chunli~魂斗罗~/github_test/chunli_dev$ git add *
chunli~魂斗罗~/github_test/chunli_dev$ git commit -m "ignore"
chunli~魂斗罗~/github_test/chunli_dev$ git push -u origin  master 
chunli~魂斗罗~/github_test/chunli_dev$
时间: 2024-10-08 11:13:24

Linux git 多人协助开发实战的相关文章

Git 多人协作开发

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且你的远程仓库的默认名称是origin 查看远程库的信息,用git remote [email protected] MINGW32 /c/gitskill (dev)$ git remoteorigin 或者,用git remote -v 查看更详细的信息: [email protected] MINGW32 /c/gitskill (dev)$ git remote -vorigin http

Git 多人协助

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git remote origin 或者,用git remote -v显示更详细的信息: $ git remote -v origin [email protected]:michaelliao/learngit.git (fetch) origin [email protected]:michaelliao

Git详细教程---多人协作开发

Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非常好的解决方案 ---- 多人协作开发. 1.多人协作原理 典型的做法是,首先创建一个git服务器,被多个人所操作. 1.多人协助实现 分为如下几个步骤: 1.创建一个git裸服务器 (git init --bare) 2.从裸服务器将版本库克隆至本地(git clone ) 3.本地常规操作 4.

github多人协同开发精简提炼

git多人协同开发详情 首先由团队管理者 创建git团队 拉入成员 创建好团队以后 初始会有一个名为 master 的主分支 管理者初始化master 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote:(origin可以理解成为一个远程计服务器) $ git remote origin git remote -v 可以查看你已经配置的远程仓库: $ git rem

我心中的git开发实战

看了廖雪峰老师的git教程,自己总结一下实际会用到的问题. 基础环境: server:centos 6.8 client :A:mac  B:linux 一.安装git,搭建git服务器 1.yum install  git 此步骤省略. 2.服务器ip地址192.168.100.136 二.添加git账户,用来启动git服务器. 1.useradd -d /home/git -m git    添加git用户及家目录 2.设置git账户密码  passwd git 2.初始化git仓库.这里选

[Linux]当一个棘手问题需要即可定位,如何协助开发,缩小定位范围

写在前面:前段时间,朋友给我说了一个她亲身经历的某知名企业面试故事,面试结束感觉自己已脱了一层皮...面试官的问题并不刁钻,但是却是步步紧逼,而且有点类似拜占庭将军问题,只是拜占庭将军问题是所有的假设都不可靠,面试官的问题是,啥也不知道,也没有规律,又严重,又不知道怎么引发...无从下手的一个棘手问题,如何协助开发定位分析,细想想,起始无非是先排除服务器相关可能,然后再一步步剥离,将嫌疑犯范围缩小,尽可能帮助研发发现并定位到罪魁祸首,当然也许不仅仅是一个元凶. 问题是这样子:某天,发现一个问题,

linux环境常用的性能监控和协助开发调试工具(附tcpdump常见使用方式)

linux有诸多优秀的工具帮助我们分析服务器各项性能指标和协助开发调试工作.下面只列举比较基础的命令,且一般是集成在linux环境中而不需再次安装的命令.更多更详细的命令可以参考 https://github.com/brendangregg/perf-tools A.CPU进程相关 常用工具列举下:uptime.ps.top.mpstat.pidstat等 uptime: 查看系统运行时间,平均负载等.Load > # of CPUs may mean CPU saturation ps:可查

嵌入式Linux驱动开发实战视频教程

嵌入式Linux驱动开发实战教程(内核驱动.看门狗技术.触摸屏.视频采集系统)适合人群:高级课时数量:109课时用到技术:嵌入式 Linux涉及项目:驱动开发.看门狗技术.触摸屏.视频采集咨询qq:1840215592 课程介绍:本课程即是针对有兴趣学习嵌入式linux驱动开发又不知道从何处着实开始学习嵌入式linux驱动开发的在校同学以及社会在职人员.本课程采用理论教学与实验相结合的方式,软件与硬件相结合的方式,重点给大家讲解嵌入式linux驱动开发的方法,系统地介绍嵌入式linux驱动开发的

嵌入式Linux驱动开发实战教程

嵌入式Linux驱动开发实战教程(内核驱动.看门狗技术.触摸屏.视频采集系统) http://www.ibeifeng.com/goods-475.html 咨询QQ2110053820 课程讲师:韩老师 课程分类:Linux 适合人群:高级 课时数量:109课时 更新程度:完成 用到技术:嵌入式 Linux 涉及项目:驱动开发.看门狗技术.触摸屏.视频采集 课程简介:    嵌入式软件开发无疑是当今最热门的行业,嵌入式软件工程师的薪资比普通的软件工 程师的薪资平均高50%以上.随着智能控制.物