首页IT科技git 本地仓库 远程仓库(Linux操作Git远程仓库与本地仓库同步的教程)

git 本地仓库 远程仓库(Linux操作Git远程仓库与本地仓库同步的教程)

时间2025-05-04 17:37:03分类IT科技浏览3642
导读:创建本地仓库并同步到远程...

创建本地仓库并同步到远程

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 <file>..." to include in what will be committed)

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 <file>..." to unstage)

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 accounts 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     ”会直接合并      ,而不会等你确认                 ,如果一旦合并错了           ,还是比较麻烦的                 。宁可慢一点,也别重头再来     。
声明:本站所有文章                 ,如无特殊说明或标注                 ,均为本站原创发布      。任何个人或组织,在未征得本站同意时           ,禁止复制、盗用                 、采集                 、发布本站内容到任何网站、书籍等各类媒体平台                 。如若本站内容侵犯了原著者的合法权益                 ,可联系我们进行处理           。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
get请求参数长度限制(Get请求使用请求体传递参数会报400异常的问题) 幕享怎么投屏到电脑(电脑版幕享怎样投屏_幕享连接失败如何解决)