>  기사  >  개발 도구  >  Git 버전 관리 학습 가이드를 요약하고 정리합니다.

Git 버전 관리 학습 가이드를 요약하고 정리합니다.

WBOY
WBOY앞으로
2022-03-03 17:36:461805검색

이 글은 버전 관리에 대한 지식 포인트를 주로 요약한 Git 관련 지식을 제공합니다. Git 버전 관리 학습 가이드를 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

Git 버전 관리 학습 가이드를 요약하고 정리합니다.

추천 학습: "Git 학습 튜토리얼"

버전 관리의 기원

  • 요즘 소프트웨어 프로젝트는 일반적으로 연구 개발 팀에 의해 분석, 설계, 코딩, 유지 관리 및 테스트됩니다.
  • 팀용 개발에서는 다음과 같은 문제를 해결해야 합니다.
    • 여러 버전을 백업하면 공간과 시간이 많이 소모됩니다.
    • 이전의 올바른 버전으로 복원하기 어렵습니다.
    • 코드 충돌을 해결하기 어렵습니다.
    • 어렵습니다. 문제 코드의 수정자 및 수정 시간을 추적하기 위해
    • 권한을 수행할 수 없음
    • 프로젝트 버전 릴리스를 제어하기가 어렵습니다
  • 위 문제를 해결하기 위해 소스 코드 관리 도구가 탄생했습니다

Revision Control

  • 은 엔지니어링 청사진을 유지 관리하기 위한 표준 관행으로, 엔지니어링 청사진의 탄생부터 최종 프로세스까지 추적할 수 있습니다. 향후 특정 버전의 개정 상태를 확인할 수 있도록 여러 파일의 내용 변경 사항을 기록하는 시스템입니다. 팀 개발이라면 버전 관리 사용은 필수입니다!
    • 1인 개발이라면 지금 버전 관리를 시작하는 것이 좋습니다!
버전 관리를 사용하면 다음과 같은 이점이 있습니다.
  • 기존 작업에 손상을 주지 않습니다
    • 증가하지 않습니다. 작업량
    • 추가 새로운 기능이 확장되면 쉬워진다
공용 버전 관리 도구

CVS가 버전 관리의 문을 엽니다
  • CVS는 1990년 탄생한 20세기의 주류 소스 코드 관리 도구입니다. Ancient Times
    SVN 중앙집중형 버전 관리의 제왕
  • SVN: Subversion이라고도 알려져 있으며 CVS의 후속 버전이자 중앙집중형 소스 코드 관리 도구입니다. 대부분의 오픈소스 소프트웨어의 코드 관리 도구(구글 코드)로 지난 몇 년 동안 국내 소프트웨어 회사에서 가장 많이 사용되었습니다
    • 集中式源代码管理工具。曾经是绝大多数开源软件的代码管理工具(google code),前几年在国内软件企业使用最为普遍
  • GIT 分布式版本控制之伟大作品
    • GIT:一款分布式
    • GIT, 분산 버전 관리의 훌륭한 작품
  • GIT: a 분산 소스 코드 관리 도구 현재 국내 거의 모든 기업이 SVN에서 GIT로의 전환을 완료했습니다.

분산형과 중앙형의 가장 큰 차이점은
  • 중앙형에서 개발자는 분산 모드에서는 개발자가 로컬로 코드를 제출할 수 있습니다
    중앙 집중식에서는 원격 서버만 컴퓨터에 코드 데이터베이스가 있습니다. 분산 모드에서는 각 개발자의 컴퓨터에 코드 데이터베이스가 있습니다


  • SVN( 중앙 집중형)

  • GIT(분산형)

Git와 SVN의 간단한 비교

  • Speed
    • 많은 경우 git이 SVN보다 훨씬 빠릅니다
  • Structure
    • SVN은 중앙 집중식 관리이고 git은 분산 관리입니다
  • 기타
    • SVN 브랜치를 사용하기가 서투르고 git은 쉽게 무제한 브랜치를 가질 수 있습니다
    • SVN이 제대로 작동하려면 인터넷에 연결되어 있어야 하며 git은 로컬 버전 제어를 지원합니다
    • SVN의 이전 버전은 각 디렉토리에 .svn을 배치하지만 git에만 있습니다. 루트 디렉터리에 .git이 있어야 합니다

GIT 소개

  • GIT는 민첩하고 효율적인 핸들을 위한 무료 오픈 소스 분산 버전 제어 시스템입니다. 分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
  • 在世界上所有的分布式版本控制工具中,git是最快、最简单、最流行的
  • 是Linux之父李纳斯的第二个伟大作品
    • 2005年由于BitKeeper软件公司对Linux社区停止了免费使用权。
    • Linus为了辅助Linux内核的开发(管理源代码),迫不得己自己开发了一个分布式版本控制工具,从而Git诞生了

GIT工作原理

  • 如果想学好GIT必须先了解GIT的工作原理
  • 工作区(Working Directory): 仓库文件夹里面, 除了.git目录以外的内容
  • 版本库(Repository):.git目录, 用于存储记录版本信息
    • 版本库中的暂缓区(staga):
    • 版本库中的分支(master): git自动创建的第一个分支
    • 版本库中的**HEAD指针:**用于指向当前分支

  • git add和git commit命名作用
    • git add: 把文件修改添加到暂缓区
    • git commit: 把暂缓区的所有内容提交到当前HEAD指针指向的分支

GIT使用环境

  • 多人开发时需要一个共享版本库, 单人开发初始化一个本地库即可
  • 共享版本库的形式:
    • 本地共享库: 文件夹/U盘/硬盘
    • 远程共享库: 自己搭建git服务器/托管到第三方平台(github/oschina等)
  • 无论是单人开发还是多人开发, 客户端都可以使用命令行或者图形化界面使用git

GIT命令-个人开发

  • git help :git指令帮助手册

    • 查看其他指令的做法:git help 其他指令
  • git init : 仓库初始化(个人仓库)

    • 仓库文件目录
    HEAD:	指向当前分支的一个提交
    description:	项目的描述信息
    config:	项目的配置信息
    info/:	里面有一个exclude文件,指定本项目要忽略的文件
    objects/:	Git对象库(commit/tree/blob/tag)
    refs/:	标识每个分支指向哪个提交
    hooks/:	默认的hook脚本
  • GIT设置配置信息

    • 配置用户名:git config user.name "用户名"(用于跟踪修改记录)
    • 配置邮箱:git config user.email "邮箱"(用于多人开发间的沟通)
    • git config -l : 查看配置信息
    • git config -e : 编辑配置信息
  • git status :查文件的状态

    • 查看某个文件的状态:git status 文件名
    • 查看当前路径所有文件的状态:git status
  • git add :将工作区的文件保存到暂缓区

    • 保存某个文件到暂缓区:git add 文件名
    • 保存当前路径的所有文件到暂缓区:git add .(注意,最后是一个点 . )
  • git commit:将暂缓区的文件提交到当前分支

    • 提交某个文件到分支:git commit -m ”注释” 文件名
    • 保存当前路径的所有文件到分支:git commit -m ”注释”
  • git log :查看文件的修改日志

    • 查看某个文件的修改日志:git log 文件名
    • 查看当前路径所有文件的修改日志:git log
    • 用一行的方式查看简单的日志信息:git log ––pretty=oneline
    • 查看最近的N次修改:git log –N(N是一个整数)
  • git diff :查看文件最新改动的地方

    • 查看某个文件的最新改动的地方:git diff 文件名
    • 查看当前路径所有文件最新改动的地方:git diff
  • git reflog :查看分支引用记录(能够查看所有的版本号)

  • git rm:删除文件(删完之后要进行commit操作,才能同步到版本库)

  • git reset

    세상의 모든 분산 버전 관리 도구 중에서 git은 가장 빠르고, 간단하며, 가장 인기가 높습니다. 🎜🎜 Linux의 아버지인 Linus의 두 번째 위대한 작품입니다. 🎜🎜2005년 BitKeeper 소프트웨어 회사는 Linux 커뮤니티에 대한 무료 사용 권한을 중단했습니다. 🎜🎜리누스 커널 개발(소스 코드 관리)을 돕기 위해 리누스가 직접 분산 버전 관리 도구를 개발해야 했고, Git이 탄생했다🎜🎜🎜🎜🎜🎜GIT의 작동 원리🎜🎜🎜 배우고 싶다면 GIT, 먼저 GIT의 작동 원리를 이해해야 합니다🎜🎜작업 디렉터리: .git 디렉터리를 제외한 웨어하우스 폴더 내부🎜🎜Repository(Repository ) :.git 디렉토리, 기록된 버전 정보를 저장하는 데 사용됩니다. 🎜🎜저장소의 Staga:🎜🎜저장소의 분기(마스터): Strong> git에 의해 자동으로 생성된 첫 번째 브랜치🎜🎜저장소의 **HEAD 포인터:**는 현재 브랜치를 가리키는 데 사용됩니다🎜🎜🎜🎜🎜🎜🎜git add 및 git commit 이름 지정 기능🎜🎜git add: 파일 수정 Add 🎜🎜🎜🎜git 커밋: 보류 모두 보류 해당 영역의 내용은 현재 HEAD 포인터가 가리키는 분기에 제출됩니다🎜🎜🎜🎜🎜🎜🎜🎜GIT 사용 환경🎜🎜🎜 다중 사용자 개발에는 공유 버전 라이브러리가 필요합니다. code> 초기화 가능🎜🎜공유 버전 라이브러리 형식: 🎜🎜로컬 공유 라이브러리: 폴더/U 디스크/하드 디스크 🎜🎜원격 공유 라이브러리: 자체 git 서버 구축/타사 플랫폼(github/oschina, etc.)🎜🎜🎜🎜단일 개발이든 다중 개발이든 휴먼 개발의 경우 클라이언트는 명령줄이나 그래픽 인터페이스를 사용하여 git🎜🎜🎜🎜GIT 명령 - 개인 개발🎜🎜🎜

    git help: git 명령 도움말 매뉴얼🎜🎜🎜기타 보기 명령 사용 방법: git help 기타 명령🎜🎜🎜🎜

    git init: 웨어하우스 초기화(개인 웨어하우스) 🎜🎜🎜Warehouse 파일 디렉터리🎜🎜

    #               表示此为注释,将被Git忽略*.a             表示忽略所有 .a 结尾的文件!lib.a          表示但lib.a除外/TODO           表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
    build/          表示忽略 build/目录下的所有文件,过滤整个build文件夹;
    doc/*.txt       表示会忽略doc/notes.txt但不包括 doc/server/arch.txt
     
    bin/:           表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
    /bin:           表示忽略根目录下的bin文件
    /*.c:           表示忽略cat.c,不忽略 build/cat.c
    debug/*.obj:    表示忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj
    **/foo:         表示忽略/foo,a/foo,a/b/foo等
    a/**/b:         表示忽略a/b, a/x/b,a/x/y/b等!/bin/run.sh    表示不忽略bin目录下的run.sh文件*.log:          表示忽略所有 .log 文件
    config.php:     表示忽略当前路径的 config.php 文件 
    /mtk/           表示过滤整个文件夹*.zip           表示过滤所有.zip文件/mtk/do.c       表示过滤某个具体文件
     
    被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
     
    需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中,如下:!*.zip!/mtk/one.txt
     
    唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。为什么要有两种规则呢?
    想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么.gitignore规则应写为::/mtk/*
    !/mtk/one.txt
     
    假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!
    注意上面的/mtk/*不能写为/mtk/,否则父目录被前面的规则排除掉了,one.txt文件虽然加了!过滤规则,也不会生效!
     
    ----------------------------------------------------------------------------------
    还有一些规则如下:
    fd1/*
    说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
     
    /fd1/*
    说明:忽略根目录下的 /fd1/ 目录的全部内容;
     
    /*
    !.gitignore
    !/fw/ 
    /fw/*
    !/fw/bin/
    !/fw/sf/
    说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;注意要先对bin/的父目录使用!规则,使其不被排除。
    🎜🎜

    GIT 설정 구성 정보🎜 🎜🎜사용자 이름 구성: git config user.name "username" (수정 기록을 추적하는 데 사용) 🎜🎜이메일 구성 : git config user.email "mailbox" (여러 개발자 간의 통신에 사용됨)🎜🎜git config -l: 구성 정보 보기🎜🎜git config -e : 구성 정보 편집🎜🎜🎜🎜

    git status: 파일 상태 확인🎜🎜🎜파일 상태 확인: git status 파일 이름 code>🎜🎜현재 경로에 있는 모든 파일의 상태 확인: git status 🎜🎜🎜🎜

    git add: 작업 공간의 파일을 버퍼 영역에 저장 🎜🎜🎜파일을 버퍼 영역에 저장: git add 파일 이름 code>🎜🎜현재 경로의 모든 파일을 임시 영역에 저장: git add . (참고 , 끝에 점이 있습니다.) 🎜🎜🎜🎜

    git commit: 버퍼 영역의 파일을 현재 브랜치에 제출🎜🎜🎜파일을 브랜치에 제출: git commit -m "comment" 파일 이름🎜🎜현재 경로의 모든 파일을 브랜치에 저장: git commit -m "comment"🎜🎜🎜🎜

    git log: 파일의 수정 로그 보기🎜🎜🎜특정 파일의 수정 로그 보기: git log 파일 이름🎜🎜현재 모든 파일의 수정 로그 보기 경로: git log🎜🎜한 줄로 간단한 로그 정보 보기: git log ––pretty=oneline 🎜🎜최신 N개 수정 사항 보기: git log –N (N은 정수) 🎜🎜🎜🎜

    git diff: 파일의 최신 변경 사항 보기🎜 🎜🎜파일의 최신 변경 사항을 볼 수 있는 위치: git diff 파일 이름🎜🎜현재 경로에 있는 모든 파일의 최신 변경 사항을 볼 수 있는 위치: git diff🎜🎜🎜🎜

    git reflog: 브랜치 참조 기록 보기(모든 버전 번호 보기 가능) 🎜🎜🎜

    git rm: 파일 삭제(삭제 후 커밋 작업 필요) 저장소에 동기화 가능) 🎜🎜🎜git 재설정: 버전 롤백(--hard 매개변수를 추가하는 것이 권장됨, git은 무제한 후회를 지원함) 🎜

    • 回退到上一个版本:git reset ––hard HEAD^
    • 回退到上上一个版本:git reset ––hard HEAD^^
    • 回退到上N个版本:git reset ––hard HEAD~N(N是一个整数)
    • 回退到任意一个版本:git reset ––hard 版本号(版本号用7位即可)
  • Git忽略提交规则 - .gitignore配置

    • 别看了, 你想要的都在这企业开发专用链接
#               表示此为注释,将被Git忽略*.a             表示忽略所有 .a 结尾的文件!lib.a          表示但lib.a除外/TODO           表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/          表示忽略 build/目录下的所有文件,过滤整个build文件夹;
doc/*.txt       表示会忽略doc/notes.txt但不包括 doc/server/arch.txt
 
bin/:           表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin:           表示忽略根目录下的bin文件
/*.c:           表示忽略cat.c,不忽略 build/cat.c
debug/*.obj:    表示忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj
**/foo:         表示忽略/foo,a/foo,a/b/foo等
a/**/b:         表示忽略a/b, a/x/b,a/x/y/b等!/bin/run.sh    表示不忽略bin目录下的run.sh文件*.log:          表示忽略所有 .log 文件
config.php:     表示忽略当前路径的 config.php 文件 
/mtk/           表示过滤整个文件夹*.zip           表示过滤所有.zip文件/mtk/do.c       表示过滤某个具体文件
 
被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
 
需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中,如下:!*.zip!/mtk/one.txt
 
唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。为什么要有两种规则呢?
想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么.gitignore规则应写为::/mtk/*
!/mtk/one.txt
 
假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!
注意上面的/mtk/*不能写为/mtk/,否则父目录被前面的规则排除掉了,one.txt文件虽然加了!过滤规则,也不会生效!
 
----------------------------------------------------------------------------------
还有一些规则如下:
fd1/*
说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
 
/fd1/*
说明:忽略根目录下的 /fd1/ 目录的全部内容;
 
/*
!.gitignore
!/fw/ 
/fw/*
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;注意要先对bin/的父目录使用!规则,使其不被排除。

GIT命令-团队开发

  • git init --bare : 仓库初始化(共享仓库)
    • 注意: 不要直接在共享仓库中编写代码
  • git clone:下载远程仓库到本地
    • 下载远程仓库到当前路径:git clone 仓库的URL
    • 下载远程仓库到特定路径:git clone 仓库的URL 存放仓库的路径
  • git pull:下载远程仓库的最新信息到本地仓库
  • git push:将本地的仓库信息推送到远程仓库
    • 提交时如果远程仓库有其它人提交的最新代码, 必须先pull, 再提交
  • 冲突解决:
    • 当多个人同时修改了同一个文件时, 后提交的需要先从服务器pull代码到问题, 手动解决完冲突之后再push到远程服务器
<<<<<<< HEAD
	你本地的新增的代码=======
	服务器上和你冲突的代码>>>>>>> e9609de28b65bf97539f94c6458cdebdf2711c9f

GIT经典协同模型

  • 中心仓库:包含master和develop两个分支

  • 分支分类

    • 主要分支:master和develop分支
    • 支持性分支:特性分支,发布分支,热补丁分支
  • 对于商业级项目,真正开发过程中都是基于develop分支进行的,develop分支是开发主线!

  • master分支中,只存放相对稳定的分支,例如:0.1版本, 0.2版本

  • 在实际产品开发中,需要“规划版本”,例如:将100个功能规划到5个不同的版本上

  • 发现bug,要基于“上一个最稳定的版本”进行修复,这是热补丁分支存在的意义!

  • 理解清楚版本管理分支的特性,是迭代式开发的重要基础!

  • git branch : 查看所有分支

  • git branch 分支名称 : 创建分支

  • 新创建的分支中的内容和master分支中的内容一样
  • git checkout 分支名称 : 切换到指定分支
  • git merge 分支名称 : 合并分支
    • 将当前所在分支和指定名称分支进行合并
  • git branch -d 分支名称 : 删除指定分支
  • 不能在当前分支中删除自己

使用GIT我们应该

  • 经常更新:降低冲突的可能性
  • 提交前需在本机测试通过:降低将问题代码传到版本库
  • 提交时一定写备注:方便其他员工查看和自己以后回顾
  • 对于不需要提交的文件不要提交到版本库

提示:

  • 제출 전 업데이트
  • 매일 출근 전날의 컴파일된 코드 제출
  • 매일 직장에서 가장 먼저 하는 일은 전날의 코드 업데이트

GITHUB USING

  • 1. GitHub 계정
  • 2. GitHub
  • 3. 저장소를 클릭하세요
  • 4.
    • 5 .새로 생성된 웨어하우스를 다운로드할 수 있지만 제출하려면 계정과 비밀번호가 필요합니다
  • 6. SSH 키 구성
  • 6.1 git 명령줄 도구를 엽니다
    • ssh-keygen -t rsa -b 4096 - 명령을 입력하세요. C "your_email@example.com"
    • ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • 6.2复制刚才生成的公钥
    • 6.3将生成好的SSH Key 添加到GitHub
    • 6.4测试是否配置成功 ssh -T git@github.com6.2 방금 생성된 공개 키를 복사하세요
  • 6.3 생성된 SSH 키를 GitHub에 추가

6.4 구성이 성공했는지 테스트 ssh -T git@github.com

나중에 나타나는 경우: 안녕하세요 *** *! 인증에 성공했지만 GitHub에서는 셸 액세스를 제공하지 않습니다.
7. SSH 키를 사용하여 GitHub를 운영


🎜🎜🎜🎜oschina에서는 GitHub와 동일한 방법을 사용합니다🎜🎜🎜 학습: "🎜Git Tutorial🎜"🎜 🎜

위 내용은 Git 버전 관리 학습 가이드를 요약하고 정리합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제