git
Git是一个开源的分布式版本控制系统,由Linus Torvalds在2005年创建,用于有效、高速地处理从小到大的项目管理。它最初是为Linux内核开发而设计的,但很快被广泛用于各种项目。
以下是Git的一些主要特性:
-
分布式架构:Git给予每个开发者一份完整的代码库工作副本(包括所有版本记录),这意味着即使在无网络连接的情况下,大部分Git操作也可以本地执行。
-
速度:Git在合并、分支、标签和其它操作方面都非常快速。
-
数据完整性:Git通过SHA-1哈希算法保护代码和历史记录的完整性。
-
支持分支和合并:Git支持快速、简便的分支创建和合并,鼓励开发者进行实验和功能开发。
-
支持创建标签:Git允许用户为特定的代码打上标签,通常用于标记发布版本。
-
便于维护:Git能够高效地处理大型项目。
-
多用户支持:Git支持用户之间的协作,可以同时处理多个开发者的工作。
-
可扩展性:Git可以与其他工具集成,如GitHub、GitLab等,提供额外的功能,如代码审查、问题跟踪等。
-
兼容性:Git与其他版本控制系统(如SVN)兼容。
-
支持网络协议:Git支持SSH、HTTP/HTTPS、Git等协议。
-
图形用户界面:虽然Git主要是命令行工具,但存在许多图形用户界面(GUI)客户端,如GitHub Desktop、SourceTree等。
Git的基本工作流程通常包括以下步骤:
- 初始化仓库:
git init
创建一个新的Git仓库。 - 克隆仓库:
git clone
从远程仓库克隆代码到本地。 - 查看状态:
git status
查看仓库当前状态。 - 添加文件:
git add
将文件添加到暂存区。 - 提交更改:
git commit
提交暂存区的更改到本地仓库。 - 查看日志:
git log
查看提交历史。 - 分支管理:
git branch
、git checkout
等命令管理分支。 - 合并分支:
git merge
将一个分支的更改合并到当前分支。 - 远程操作:
git fetch
、git pull
、git push
等命令与远程仓库交互。 - 解决冲突:当合并时出现冲突,需要手动解决后再次提交。
Git是一个强大的工具,对于任何需要进行版本控制的软件开发项目都是一个宝贵的资产。
git迁移介绍
在代码管理中,经常遇到仓库迁移,比如从github迁移到gitee、gitcode、gitlab或公司git仓库,甚至相互之间迁移,现整理常规的迁移方法。
迁移方法
将一个Git仓库转移到另一个Git仓库中,可以通过以下步骤完成:
-
克隆原始仓库:
首先,你需要将原始仓库克隆到本地。打开终端或命令行工具,输入以下命令:git clone https://github.com/username/original-repo.git
-
创建新的远程仓库:
在你的新Git仓库中,创建一个新的远程仓库。你可以在GitHub、GitLab或其他Git服务上创建。 -
添加新的远程仓库:
在本地仓库中,添加你刚刚创建的新远程仓库。假设新仓库的URL是https://github.com/username/new-repo.git
,你可以使用以下命令:cd original-repo git remote add new-repo https://github.com/username/new-repo.git
-
推送代码到新仓库:
将代码推送到新仓库。这将把原始仓库的所有历史推送到新仓库:git push new-repo --all git push new-repo --tags
-
验证新仓库:
检查新仓库是否包含了所有原始仓库的代码和历史:git log --oneline --decorate --graph --all
-
删除旧仓库的远程(可选):
如果你不再需要旧仓库的远程,可以删除它:git remote remove origin
-
更新README或其他文档(可选):
更新新仓库的README文件或其他文档,确保它们指向新仓库的URL。 -
通知团队成员(可选):
如果你的仓库是团队项目的一部分,确保通知所有团队成员新的仓库URL,并更新任何相关的文档或链接。
通过这些步骤,你可以将一个Git仓库的内容转移到另一个Git仓库中。
迁移示例
以x264源码迁移为例,以Windows平台为实验环境。
- 克隆x264源码到本地仓库:
git clone https://code.videolan.org/videolan/x264.git
- 在gitcode上新建一个x264的远程仓库:
https://gitcode.com/yanceyxin/x264.git
- 在本地原x264项目中,添加新的远程仓库,可以用ssh,也可以用https:
cd x264
git remote add x264 git@gitcode.com:yanceyxin/x264.git
- 查看当前仓库中已经存在的远程仓库列表:
git remote -v
G:\x264 [master ≡]> git remote -v
origin https://code.videolan.org/videolan/x264.git (fetch)
origin https://code.videolan.org/videolan/x264.git (push)
x264 https://gitcode.com/yanceyxin/x264.git (fetch)
x264 https://gitcode.com/yanceyxin/x264.git (push)
- 将代码推送到新仓库远端:
git push
G:\x264 [master ≡]> git push x264
remote: request is being processed, request-id: TEV5dVk1Z3JoVA==
Enumerating objects: 24282, done.
Counting objects: 100% (24282/24282), done.
Delta compression using up to 20 threads
Compressing objects: 100% (4564/4564), done.
Writing objects: 100% (24282/24282), 7.00 MiB | 11.40 MiB/s, done.
Total 24282 (delta 19675), reused 24282 (delta 19675), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (19675/19675), done.
remote: Start Git Hooks Checking
remote: Too many commits, skip git hook check
remote: [PASSED]
remote:
remote: To create a merge request for master, visit:
remote: https://gitcode.com/yanceyxin/x264/merge_requests/new?source_branch=master
remote:
To gitcode.com:yanceyxin/x264.git
* [new branch] master -> master
- 抓取远端所有更新:
G:\gitcode\x264 [main ≡]> git fetch origin
remote: request is being processed, request-id: ell4VWZ2cnNUOQ==
- 本地新建master分支并拉取远端:
git checkout -b master origin/master
G:\gitcode\x264 [main ≡]> git checkout -b master origin/master
branch 'master' set up to track 'origin/master'.
Switched to a new branch 'master'
- 查看所有分支:
git branch -a
G:\gitcode\x264 [master ≡]> git branch -a
main
* master
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/master
- 本地和远端都查看文件,如下图,可以看到已经更新x264源码了