Linux操作Git远程仓库与本地仓库同步的教程
创建本地仓库并同步到远程
git是非常强大的版本管理工具。接下来的时间里,我就和大家絮叨絮叨git的入门:如何在本地创建一个git仓库,并把自己的本地代码同步到远程。此教程是在mac上操作的,如果您的系统是Linux,那么操作方法相同;如果您的系统是windows,那么,只需要把git的bash窗口调出来,以后的过程也都与Linux相同。
一、首先,您需要安装git,此步就忽略了,自行安装即可。
二、假设你目前还没有创建一个工作目录,那么,先创建一个目录吧,就叫StudyGit。
三、现在的StudyGit目录还只是一个本地目录,和git没有任何关联,那么,我们怎么样才能把这个目录和git关联起来呢?只需要进入StudyGit目录,运行如下命令:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git init
Initialized empty Git repository in /Users/yanyaozhen/Coding/Practice/StudyGit/.git/
提示已经说明我们初始化了一个空的本地git仓库。如果你查看StudyGit下的所有文件时,会发现一个.git 的隐藏文件,这个文件非常重要,版本的控制就靠它了。同时,如果你要部署应用程序到生产环境时,切记不要把该目录部署到服务器,因为这可是黑客的最爱啊!
四、接下来我们来看一个基本可以说是用的最频繁的一个命令:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git status
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
没错,就是"git status"。这个命令用于查看当前git的状态,比如,上面的例子中,我们刚创建了一个空的git仓库,那么运行该指令时,git会提示我们,当前没有任何东西要提交,同时提示我们,可以创建或者复制文件后使用“git add”命令来跟踪文件的变化。
五、现在让我们来创建一个文件吧。我们创建一个叫“a.txt”的文本文件,并且内容如下:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ cat a.txt
aaa
这个时候,让我们再来运行下git status吧。运行如下:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git status
On branch master
Initial commit
Untracked files:
(use "git add
a.txt
nothing added to commit but untracked files present (use "git add" to track)
这时会提示我们有一个未追踪的文件,叫a.txt。我们要把这个文件加入到版本控制中,于是,我们运行如下命令:
复制代码代码如下:
git add a.txt
这个命令表示把我们指定的a.txt加入到git控制之下。add命令可以没有参数(在windows下可以没有参数,在mac下需要指定当前目录即“.”),如果没有参数,则表示把目录下的所有文件都加入到git仓库中。这个时候,我们再运行下“git status”:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached
new file: a.txt
提示我们有改变需要被提交。这个时候,a.txt这个文件就存在于所谓的“暂存区”中,暂存区中的文件可以被真正提交到git仓库。有同学可能说,如果我不想提交这个文件了,那怎么把刚才的文件从暂存区移除呢?其实答案就在刚才的提示中:
use "git rm --cached ..." to unstage。
那么,我们运行下这个命令:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git rm --cached a.txt
rm 'a.txt'
再运行git status时就可以发现,又回到文件没有被提交时的状态了。
六、当我们的文件已经通过“git add”加入到暂存区后,就可以把文件真正提交到git仓库了。如下:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git commit -m "提交a.txt"
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
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 'yanyaozhen@macbookpro.(none)')
阿欧,报错了,查看给出的错误原因,发现是因为没有设置email和用户名,所以git不让我提交。git为什么要强制要求设置了这两个配置才能提交呢?因为git必须得知道是谁提交的,如果连谁提交的都不知道,那还怎么做版本管理啊,是不。所以我们根据提示设置下:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git config --global user.email "youremail@example.com"
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git config --global user.name "yourusername"
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$
好了,我们再提交下:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git commit -m "提交a.txt"
[master (root-commit) dab07d0] 提交a.txt
1 file changed, 1 insertion(+)
create mode 100644 a.txt
发现已经可以提交成功了,提示一个文件被修改(就是我们的a.txt),一行被插入(就是我们唯一的一行“aaa”)。
我们再运行下git status:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git status
On branch master
nothing to commit, working directory clean
提示我们当前没有东西要提交,当前工作目录是干净的,因为我们都提交到git了。
好了,到这步后,git就可以完全跟踪已经被提交的文件了,以后,这个文件的任何修改,它都可以记录下来。比如某个人对项目私自修改了一些东西,项目管理者根据git的版本记录是一定可以找到是谁修改了哪些文件的。
现在我们就可以把文件提交到远程服务器了。
七、当我们要提交git仓库中的内容到远程服务器时,我们必须得先成为远程服务器受信任的用户才行(服务器当然不允许所有人都可以推送内容,那样就乱套了)。这个时候,我们需要先在本地生成一个公钥,然后把公钥放到远程服务器的账户列表中。生成公钥的命令如下:
复制代码代码如下:
ssh-keygen -t rsa -C "youremail@example.com"
如果你是windows用户,那么公钥生成的目录是C:\Users\用户名.ssh下,里面有两个文件 id_rsa 和 id_rsa.pub ,其中id_rsa.pub中的内容就是我们需要的公钥。如果你是Linux或者mac用户,那么在用户主目录下也会有一个.ssh目录,里面放着的是私钥和公钥。假设我们现在要把github作为远程推送服务器地址,那么,我们首先把公钥放在github的settings-SSH keys列表中(点击新建一个ssh key,title随意,把公钥的全部内容复制进行保存即可)。
>
八、现在我们可以给StudyGit项目在github上添加一个远程仓库了。在github上add new repository,名字我在这里也用StudyGit了(起其他名字也可以),建好后显示如下:
可以看到有一个ssh地址是git@github.com:onlyanyz/StudyGit.git,这个就是我们的远程git仓库地址了,一会我们就会把文件推送到这里。
接下来,我们需要把本地git仓库关联到远程git仓库,操作如下:进入本地StudyGit根目录,执行如下命令:
复制代码代码如下:
git remote add origin git@github.com:onlyanyz/StudyGit.git
这个命令的意思是,我给远程仓库(就是git@github.com:onlyanyz/StudyGit.git)起了个别名,叫origin(其实叫别的名字也可以,你只要知道这是别名就行,以后就用别名来操作远程库)。操作后,我们可以使用“git remote”命令来查看当前本地仓库关联了哪些远程仓库(它会列出每个远程库的简短名字。如果您之前会使用git clone命令的话,在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git默认使用这个名字来标识你所克隆的原始仓库)。
九、关联了远程仓库之后,我们就可以推送了。将本地仓库push到远程仓库的命令如下:
复制代码代码如下:
git push origin master
命令解释如下:
git push的语法为:git push 远程主机名 本地分支名:远程分支名
该语法表示把本地分支名push到远程主机名的远程分支。我们可以看到刚才执行的语句并没有远程分支名(被省略了),如果省略远程分支名,则表示将本地分支推送到与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。所以刚才执行的语句的意思是,把本地的master分支推送到远程主机的master分支。
关于git push命令以后还需要注意的地方:
a.如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。例如:
复制代码代码如下:
$ git push origin :master
该命令等同于如下指令:$ git push origin --delete master,表示删除远程主机的master分支。
b.git push 有时候本地分支和远程分支名都可以省略,有时候连主机名也可以省略,这个现在就不细说了。
c.如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push:
复制代码代码如下:
$ git push -u origin master
好了,现在我们已经把StudyGit目录中的内容都推送到远程了,现在运行git status看下:
复制代码代码如下:
~/Coding/Practice/StudyGit$ git status
On branch master
nothing to commit, working directory clean
工作目录还是干净的,接下来您就可以继续在本地进行创建文件-提交到暂存区-提交到本地仓库-push到远程仓库的过程啦!
<><><>>>>
将远程仓库克隆到本地
下面我们来讲一个新的玩法,就是先有远程仓库,后有本地仓库,即把远程仓库“克隆(clone)”到本地。
假设现在你的团队其他成员已经在git上建好了仓库,并且也push过代码,这个远程git仓库还叫“StudyGit”,有两个文件:a.txt和README.md,现在,您也要开始贡献代码了,那么,您首先需要把团队其他成员提交的所有东西都拉取到你的本地目录,这个时候就会用到“clone”命令了:
复制代码代码如下:
git clone git@github.com:onlyanyz/StudyGit.git
只要执行这句指令,就可以把远程仓库的所有东西都拉取到本地工作目录了,当然生成的本地目录名和远程仓库名字是一样的。
如果您现在查看下当前本地git仓库的状态,如下:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/StudyGit$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
命令回显表示,我的本地分支已经更新为最新的远程master分支了。此后,我们就可以按照“git快速入门之一”这篇文章所述进行添加代码并提交了。
现在,让我们再看下刚才clone到本地的git项目,现在有两个文件,如下:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/StudyGit$ ll
total 16
-rw-r--r-- 1 yanyaozhen staff 21B 11 19 00:04 README.md
-rw-r--r-- 1 yanyaozhen staff 4B 11 19 00:04 a.txt
接下来,假如A同学在github上的这个仓库中又新增了一个文件b.txt,那现在github远程仓库中就有三个文件(注意,现在本地仓库中的文件就已经与远程仓库不同了)。
接下来,我们在本地继续我们的开发工作,假如新建了一个文件“c.txt”,现在,让我们来把"c.txt"文件加入暂存区,然后commit到本地仓库,这时,我们想把刚才的工作成果再push到远程,执行如下:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/StudyGit$ git push origin master
To git@github.com:onlyanyz/StudyGit.git
! [rejected] master - master (fetch first)
error: failed to push some refs to 'git@github.com:onlyanyz/StudyGit.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
阿欧,报错了,懂点英文的同学可以从提示信息看出问题所在,因为我们的远程已经有更新了,我们在push到远程的时候,必须先把远程的改动拉到本地合并起来,才能再次提交我的修改。所以,以下的命令就出场了:
复制代码代码如下:
$ git fetch origin master
该指令意思是从远程origin仓库的master主分支更新最新的版本到origin/master分支上。
然后我们比对下当前本地master分支和origin/master分支的区别:
复制代码代码如下:
$ git log -p master..origin/master
执行的回显结果会详细列出这两个分支的差异。
然后,我们需要把origin/master分支上的内容合并到本地master分支:
复制代码代码如下:
git merge origin/master
执行该指令后,可能会要求输入合并的理由,填写后,我们就合并成功了。这个时候,我们就可以再次push了:
复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/StudyGit$ git push origin master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 543 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To git@github.com:onlyanyz/StudyGit.git
6b3662f..6036a05 master - master
表示push成功,现在你可以去github上看到我们在本地新建的b.txt文件啦!
后记:有同学可能查了网上的资料,说“git fetch”和“git merge”指令可以合二为一,叫“git pull”,在此强烈建议大家使用分开的指令,因为“git pull”会直接合并,而不会等你确认,如果一旦合并错了,还是比较麻烦的。宁可慢一点,也别重头再来。
>>
推荐系统
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载
语言:中文版系统大小:3.91GB系统类型:Win7欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统
相关文章
- win10预览版10122官方已知问题汇总
- win10蓝屏显示详细信息方法 win10蓝屏记录显示方法
- 让Windows8支持PDF/ISO文件格式的方法
- win10收费吗?winXP系统可以免费升级到windows10的哪些系统?
- Win10怎么禁止用户手动搜索更新?
- win7隐藏图标文字 图文教你隐藏win7桌面图标文字
- 用来获取Linux主机信息的5个常用命令
- Windows系统回收站的文件保存在哪个磁盘上
- Win10系统提示Microsoft DirectX诊断工具已停止工作的原因及解决方法
- Solaris下拷贝文件的技巧
- iPhone怎么录制屏幕?在Mac系统上录制iOS屏幕方法图解
- win10中怎么让qq始终以管理员身份运行程序?
- Windows10正式版升级已知问题汇总
- parallels desktop怎么安装驱动 parallels desktop安装驱动方法
- 虚拟机怎么不能使用NAT模式上网了?
- 索尼笔记本电脑将预装win8改win7系统方法详细图解
- 利用Win7的传送功能轻松为资料搬家的方法
- Windows 8打开文件夹假死原因分析及解决
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1俄罗斯狂人精简版Win10下载_俄罗斯狂人Win10终极精简版64位下载
- 2Win11预览版无损系统 v2023下载
- 3雨林木风 GHOST XP SP3 喜迎新年版 V2017.01 下载
- 4番茄花园 GHOST WIN10 X86 完美体验版 V2020.04 (32位) 下载
- 5深度技术 GHOST WIN7 SP1 X64 欢度元旦版 V2017.01(64位) 下载
- 6win10绿色纯净版下载-win10绿色纯净版最新 v2023.01
- 7电脑公司Ghost Win10 好用专业版X64位 v2023.04最新系统下载
- 8Win7 32位旗舰版 v2022下载
- 9番茄花园 Windows 10 官方企业版 2020年1月(64位) ISO高速下载
- 10青苹果Win7 Ghost版下载_青苹果Windows7 Sp1 32位旗舰装机版镜像下载V2023.06