创建本地库
在D:\GitWorkSpace
目录下创建新的文件夹MyFirstProject_GitHub
,并为其执行 Git 初始化。
33891@LeapingQuantum MINGW64 ~
$ cd /d/GitWorkSpace/
33891@LeapingQuantum MINGW64 /d/GitWorkSpace
$ mkdir MyFirstProject_GitHub
33891@LeapingQuantum MINGW64 /d/GitWorkSpace
$ ls -d */
MyFirstProject// MyFirstProject_GitHub//
33891@LeapingQuantum MINGW64 /d/GitWorkSpace
$ cd ./MyFirstProject_GitHub/
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub
$ git init
Initialized empty Git repository in D:/GitWorkSpace/MyFirstProject_GitHub/.git/
在项目中新建一个文件test.txt
并写入内容。
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ vim test.txt
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ cat test.txt
这是新建前的第一次编辑。
将新文件添加到暂存区、提交到本地库。
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ git add test.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ git commit -m "第一次提交" test.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory
[master (root-commit) 5aa6f3a] 第一次提交
1 file changed, 1 insertion(+)
create mode 100644 test.txt
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ git status
On branch master
nothing to commit, working tree clean
创建远程库
在 GitHub 上完成账号的注册。
创建一个新的仓库
填写表单
完成创建
在本地的远程库地址别名
在本地连接远程库时,远程库的地址是必需的。但这往往长而复杂,因此可以在本地设置远程库的地址别名。
当前的远程库地址:
https://github.com/TullyMonster/MyFirstProject_GitHub.git
。
查看别名
使用git remote -v
命令查看已保存在本地库的地址别名:
不同本地库的远程库别名相互独立,互不影响。
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ git remote -v
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$
本地未保存任何远程地址的别名。
设置别名
使用git remote add <Alias4RemoteRepositoryAddress> <RemoteRepositoryAddress>
命令为远程地址<RemoteRepositoryAddress>
设置别名<Alias4RemoteRepositoryAddress>
。
一般以
origin
为远程库别名。
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ git remote add origin https://github.com/TullyMonster/MyFirstProject_GitHub.git
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ git remote -v
origin https://github.com/TullyMonster/MyFirstProject_GitHub.git (fetch)
origin https://github.com/TullyMonster/MyFirstProject_GitHub.git (push)
命令
git remote add origin https://github.com/TullyMonster/MyFirstProject_GitHub.git
的含义是: 为远程地址https://github.com/TullyMonster/MyFirstProject_GitHub.git
在本地库设置名为origin
的别名。即,用origin
代替上述地址。 再次查看别名配置时,括号中的fetch
或push
分别表示用对应别名拉起或推送数据时使用的链接。
本地库的推送
使用命令git push <Alias4RemoteRepositoryAddress> <LocalRepositoryBranchName>
将本地库分支<LocalRepositoryBranchName>
推送到远程库<Alias4RemoteRepositoryAddress>
。
33891@LeapingQuantum MINGW64 /d/GitWorkSpace/MyFirstProject_GitHub (master)
$ git push origin master
info: please complete authentication in your browser...
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 282 bytes | 282.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/TullyMonster/MyFirstProject_GitHub.git
* [new branch] master -> master
推送成功:这个过程将显式或隐式地完成账号验证。
远程库的克隆
配置待克隆的本地目标路径
计划将https://github.com/TullyMonster/MyFirstProject_GitHub
的项目克隆到D:\GitWorkSpace_CLONE
路径下的MyFirstProject_GitHub
文件夹中。
执行克隆
在目标文件夹MyFirstProject_GitHub_CLONE
下执行git clone <RemoteRepositoryAddress>
命令,将远程地址<RemoteRepositoryAddress>
的项目克隆到本地(MyFirstProject_GitHub_CLONE
)。
33891@LeapingQuantum MINGW64 /d/GitWorkSpace_CLONE
$ git clone https://github.com/TullyMonster/MyFirstProject_GitHub.git
Cloning into 'MyFirstProject_GitHub'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
克隆到本地库后的文件树结构:
D:\GitWorkSpace_CLONE
│
└─MyFirstProject_GitHub
test.txt
克隆的效果
- 完整地下载远程库项目到本地;
- 初始化本地库;
- 创建远程地址别名(默认为
origin
)。修改来自克隆的本地库并提交版本
修改
``` 33891@LeapingQuantum MINGW64 /d/GitWorkSpace_CLONE/MyFirstProject_GitHub (master) $ cat test.txt 这是新建前的第一次编辑。
33891@LeapingQuantum MINGW64 /d/GitWorkSpace_CLONE/MyFirstProject_GitHub (master) $ vim test.txt
33891@LeapingQuantum MINGW64 /d/GitWorkSpace_CLONE/MyFirstProject_GitHub (master) $ cat test.txt 这是新建前的第一次编辑。 这是克隆后的修改。
<a name="C9Za8"></a>
### 提交
33891@LeapingQuantum MINGW64 /d/GitWorkSpace_CLONE/MyFirstProject_GitHub (master) $ git add test.txt
33891@LeapingQuantum MINGW64 /d/GitWorkSpace_CLONE/MyFirstProject_GitHub (master) $ git commit -m “来自克隆的提交” test.txt [master 7038017] 来自克隆的提交 1 file changed, 1 insertion(+)
33891@LeapingQuantum MINGW64 /d/GitWorkSpace_CLONE/MyFirstProject_GitHub (master) $ git log —pretty=oneline 703801763c2f22e68f482eb84d233db74cc3cbd1 (HEAD -> master) 来自克隆的提交 5aa6f3a1d186fb19f73380b426249a986d292c08 (origin/master, origin/HEAD) 第一次提交 ```
邀请开发者加入团队
在加入团队之前,开发者无法将本地库使用
git push origin master
命令推送版本到远程库。
若要邀请开发者加入团队,远程仓库所有者需要前往项目的设置 (Settings) 的访问管理 (Manage access) 中添加成员 (Add people)。
远程开发者提交修改
团队成员[LS201213](https://github.com/LS201213)
加入协作后,将远程库克隆到本地,并对test.txt
文件的最后一行新增了一行内容:这是克隆后的修改。
。
随后,push
到远程库:
拉取已更新的远程库
拉取 (pull
) 远程库操作实质是抓取 (fetch
) 和合并 (merge
) 操作的集合。将这两个操作分开进行,可以防止因过程复杂而引发的错误。
git fetch <Alias4RemoteRepositoryAddress> <RemoteBranch>
fetch
命令和pull
命令对于远程库来说都是读取操作,不需要公有库的身份验证。
将远程库的项目下载到本地,但不会对工作区做修改。可使用git checkout <Alias4RemoteRepositoryAddress>/<RemoteBranchAddress>
命令将分支切换到fetch
的内容,查看远程库的状态(示例:git checkout origin/master
)。
git merge <Alias4RemoteRepositoryAddress>/<RemoteBranch>
git pull <Alias4RemoteRepositoryAddress> <RemoteBranch>
依次完成抓取 (fetch
) 和合并 (merge
) 操作。
协同开发时的冲突处理
如果不是基于 GitHub 远程库最新版所做的修改,则不能直接推送——必须先拉取。 若随后引发了冲突,则按照“本地分支冲突”解决即可。
协同开发时,开发团队若对同一位置的代码执行了不同的修改,除第一个提交到本地库的开发者外,其他开发者再次提交时将会产生冲突。
即,若使用git push <Alias4RemoteRepositoryAddress> <RemoteBranch>
命令将产生错误,推送失败。
因此,需要先将远程库的更新拉渠道本地:git pull <Alias4RemoteRepositoryAddress> <RemoteBranch>
,但必定会产生冲突。于是进入合并冲突状态(<LocalBranch>|MERGING
)。随后,根据提示采用与本地库类似的方法解决冲突:
本地库操作
冲突解决完毕后,使用git pull <Alias4RemoteRepositoryAddress> <RemoteBranch>
命令将本地库推送到远程库。