【Missing Semester L6】Git背后的data model及常用git命令

Git的理解-数据模型 自从git诞生于2005年以来,它就已经在开源环境中大受欢迎,并且我们在工作的时候经常使用它。它是一个很棒的VCS工具,有许多优点,但学习它并不容易。我认为,在我们习惯使用git过程中喜欢它最好的方式就是通过了解它的内部工作方式。就像Edward Thomson所说的一句话: Git命令只是对数据存储的泄漏抽象 这就我们平常无论记住多少git命令或技巧,但如果不了解git的工作原理,就会时常刚到对git的奇怪方式的困惑。 所以,在对git的理解中,本文将要讲述的第一件事情就是git的核心和灵魂–数据模 阅读详情

在这里插入图片描述


link

Git的数据模型

快照

git会把文件和文件夹的历史建模为一系列快照(snapshots),其中文件又叫"blob",就是一堆字节;文件夹又叫"tree",包含对文件和文件夹名字的映射(毕竟文件夹里也可以有文件夹)。
某一时刻的一个快照可以看作是:
在这里插入图片描述
最顶层的tree包含一个叫foo的文件夹和一个叫baz.txt的文件,然后foo下面又包含了一个叫bar.txt的文件。

历史

git通过相关的快照来建模历史。最简单的想法,自然是顺序的历史,按时间顺序包含一系列快照。不过Git没有采用如此简单的模型。
事实上,在Git种,历史建模为快照的有向无环图。
可以把一个个快照看作是一个个节点,区别于线性模型的是,在图里,一个节点可以有多个父节点。比如在git种,分支合并后得到的快照节点就会有多个父节点。
Git种把这些快照叫做“Commit”,对一个commit的历史进行可视化展示,可能会长这样:
在这里插入图片描述
图里每个“o"代表一个快照,箭头指向父节点,拿第一排来说,现有坐起第一个o,然后才有第二个o这样。第三个快照之后,出现了分支,比如说有两个不同的功能要进行平行的开发,最后可能进行分支合并得到新的快照,比如:
在这里插入图片描述
Git中的commit是不可变的,改动后只会生成新的commit。

数据模型

用伪代码来表示Git的数据模型可以如下图所示:
在这里插入图片描述

对象和content-addressing

Object,对象,在Git里指的是一个blog、一个tree或者一个commit。

type object = blob | tree | commit

在Git的数据存储中,所有的object是通过哈希(SHA-1 hash)来进行内容寻址的(content-addressing)。
在这里插入图片描述
可以理解为每个object通过哈希算出一个ID,然后根据这个ID来获得object。这个ID其实就是我们查看GIt历史的时候那一个个很长的字符串。而且blob tree commit都可以看作是object,当object引用其他object的时候,只要引用哈希后的ID就行。

比如,在这个结构里,可视化一下最顶层的结构(git cat-file -p 698281bc680d1995c5f4caaf3359721a5a58d48d),
在这里插入图片描述
可以看到类似这样的结果:
在这里插入图片描述
顶层结构包含指向baz.txt和foo文件夹的指针。如果继续去看baz.txt的ID所指向的内容(git cat-file -p 4448adbf7ecd394f42ae135bbeed9676e894af8),可以看到这样的内容:
在这里插入图片描述

references

现在,所有的commit都可以用一串哈希之后的ID来标识,但是对人而言,很难记住40位的16进制字符串。
对此,Git提出reference,将这串ID再映射为人类可读的名字。reference是可变的,通常会指向最新的提交
在这里插入图片描述
这样就可以用人类可读的名字标识一串哈希ID了,而标识“我们当前在哪”的是HEAD

repositories

这个repository指的就是Git的objects和references,Git所有在磁盘上的存储就是objects和references,git命令就是操纵commits的DAG,实现增加objects或者修改/增加references。在进行命令操作的时候,可以想一想会对这个DAG产生怎样的操作;同理,想要实现对DAG的某种操作,往往也有对应的git命令。

Staging area

通过staging area可以明确哪些改变需要提交成为shapshot哪些不用

Git命令行接口

更详细的部分可以看Pro git

基础

  • git help <command>: get help for a git command

  • git init: creates a new git repo, with data stored in the .git directory

  • git status: tells you what’s going on

  • git add <filename>: adds files to staging area

  • git commit: creates a new commit. Write good commit messages!

  • git log: shows a flattened log of history

  • git log --all --graph --decorate: visualizes history as a DAG

  • git diff <filename>: show changes you made relative to the staging area

  • git diff <revision> <filename>: shows differences in a file between snapshots

  • git checkout <revision>: updates HEAD and current branch

分支和合并

  • git branch: shows branches
  • git branch <name>: creates a branch
  • git checkout -b <name>: creates a branch and switches to it
    same as git branch <name>; git checkout <name>
  • git merge <revision>: merges into current branch
  • git mergetool: use a fancy tool to help resolve merge conflicts
  • git rebase: rebase set of patches onto a new base

远程

  • git remote: list remotes
  • git remote add <name> <url>: add a remote
  • git push <remote> <local branch>:<remote branch>: send objects to remote, and update remote reference
  • git branch --set-upstream-to=<remote>/<remote branch>: set up correspondence between local and remote branch
  • git fetch: retrieve objects/references from a remote
  • git pull: same as git fetch; git merge
  • git clone: download repository from remote

undo

  • git commit --amend: edit a commit’s contents/message
  • git reset HEAD <file>: unstage a file
  • git checkout -- <file>: discard changes

高级git

  • git config: Git is highly customizable
  • git clone --depth=1: shallow clone, without entire version history
  • git add -p: interactive staging
  • git rebase -i: interactive rebasing
  • git blame: show who last edited which line
  • git stash: temporarily remove modifications to working directory
  • git bisect: binary search history (e.g. for regressions)
    .- gitignore: specify intentionally untracked files to ignore

其他

练习

1、如果之前完全没用过Git的话,先看一下Pro git的前几章或者Learn git brnching
2、clone project,可视化看看历史,谁是最后修改README.md的(提示,用git log加上argument)?最后修改collections中_config.yml这行的提交的message是什么?(提示,用git blame和git show)

git clone https://github.com/missing-semester/missing-semester.git
git log --all --graph --decorate
git log README.md
git blame _config.yml # 查看collections那一行是谁改的
git show a88b4eac # 对照差出来的ID看Message

3、Git中常常出现的一个错误是不小心把特别大或者敏感文件。试着添加一个文件到repositority,做一些提交,然后把这个文件从历史里删掉

wget bfg的地址
 java -jar bfg-1.14.0.jar -D sensifile.py

4、对一个项目进行修改,然后进行git stash,运行git log --all --oneline,运行git stash pop来撤销
在这里插入图片描述
5、在~/.gitconfig中加上别名,运行git graph得到git log --all --graph --decorate --oneline的结果。
在这里插入图片描述
6、可以运行git config --global core.excludesfile ~/.gitignore_global后在~/.gitignore_global中定义忽略的文件,设定忽略一些系统文件
创建文件后加上*.DS_Store
7、提交一个pull request

git branching model git branching model git branching model git branching model git branching model git branching model 立即下载

相关推荐

冗余位技术在SAR ADC中的动态误差恢复机制解析

本文深入解析了冗余位技术在SAR ADC中的动态误差恢复机制,详细介绍了其基本概念、动态误差产生原因及冗余位的容错空间设计、时序松弛策略和数字校正算法。通过实际电路设计案例和数学建模,展示了冗余位技术如何显著提升ADC的精度和能效比,同时探讨了未来发展方向。

weixin_28335283的博客 975

Study Git - Data Model

Git data model

good_jiojio的博客 408

多模态RAG实战:为LLM装上视觉之眼,实现图文混合文档智能问答

检索增强生成(RAG)技术通过结合外部知识库,有效缓解了大语言模型(LLM)的幻觉问题,并扩展了其知识边界。其核心原理是将文档切分、向量化后存入向量数据库,在问答时通过语义检索召回相关上下文,辅助LLM生成更精准的答案。这项技术的核心价值在于,它为大模型应用提供了一种低成本、高效率的知识注入与实时更新方案,广泛应用于智能客服、知识库问答、文档分析等场景。随着应用深入,纯文本RAG在处理产品手册、学术论文、设计图纸等富含视觉信息的文档时面临瓶颈。本文聚焦的**多模态RAG**和**视觉理解**技术,正是为了解

weixin_30698527的博客 722

git对象、快照、提交、引用

上文提到对象,那么什么git对象?git 被称为对象可寻址文件系统。git在存储数据时,通过对对象存储的内容进行Hash计算得到hash值进行存储。git 也可以通过对象的Hash值找到这个对象。SHA-1值50b3638b37b496c23c479f0897d52d5b6b87bd1a 以前2位作为目录名,余下38位组成一个文件名。上文提到对象,那么什么git对象?1、 git 有3种对象:数据对象(blob),树对象(tree),提交对象(commit2、其中(blob。

张紫娃的博客 984

如何实现三种不同RAM?(单端口RAM、伪双端口RAM、真双端口RAM|verilog代码|Testbench|仿真结果)

RAM(随机存取存储器)是计算机系统中的一种主要存储器件,用于存储和读取数据。在RAM中,单端口RAM(Single-port RAM)和双端口RAM(Dual-port RAM)是两种常见的类型,双端口RAM又分为真双端口(True dual-port RAM)和伪双端口RAM(Simple dual-port RAM)。那么什么是单端口和双端口?又该如何区分真双端口和伪双端口?输入只有一组数据线和一组地址线,读写共用地址线,输出只有一个端口。

Loudrs的博客 1万+

YOLOv9 损失函数解析

YOLOv9作为YOLO系列的最新成员,在损失函数设计上进行了多项创新,重点优化了动态任务对齐机制、多模态定位损失融合以及跨层级梯度协同,进一步提升了检测精度与训练效率。

浩瀚之水的专栏 1293

深入了解Git:从数据模型到集成IDEA

通过理解Git的数据模型、暂存区、命令行接口,并将其集成到IntelliJ IDEA中,可以极大地提升开发效率。希望本文能够帮助你更好地使用和管理Git仓库,充分利用IntelliJ IDEA的强大功能进行版本控制。

qq_52010229的博客 1077

Proxmox VE 9 更换源

创建一键更换Proxmox VE 9.0源的Bash脚本,实现快速替换软件源。脚本需包含订阅提醒关闭功能,兼容Proxmox VE 9.0系统,执行命令为bash /proxmox_9.0_Repo.sh。该工具可简化源配置过程,自动处理系统更新源替换及订阅提示屏蔽,适合需要快速配置Proxmox环境的用户使用。

极致,细节 4989

Git入门:数据模型 to 底层原理

版本控制系统(VCS)是软件开发中不可或缺的工具,而Git作为现代版本控制的事实标准,其底层设计远比表面命令更加优雅。本文将从数据模型的角度,揭示Git的核心工作原理。

geekchen的博客 870

【AI大模型:前沿】46、AI+无人机:智能飞行革命全景指南——从技术突破到行业应用与未来趋势

AI+无人机的融合不仅是技术迭代,更是“空间生产力”的革命——它将人类活动范围从地面拓展至低空,重构物流、农业、应急等行业的生产方式。当前,技术突破(如多模态感知、群体智能)与法规松绑(超视距飞行许可)正加速产业化,预计2030年全球低空经济市场规模将突破万亿美元。技术层:轻量化AI模型、边缘-云端协同、安全冗余系统;应用层:垂直领域解决方案(如电网AI巡检、精准农业);生态层:无人机巢建设、空管系统、数据服务平台。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 5596

c#视觉应用开发中如何使用Emgu CV在C#中进行图像处理?

Emgu CV 是 OpenCV 的 .NET 包装器,可以让开发者在 .NET 语言(如 C#)中使用 OpenCV 的功能进行图像处理。在进行图像处理时,Emgu CV 提供了丰富的 API 可以使用。PictureBoxImageBox下面是一个详细的示例,演示如何使用 Emgu CV 在 C# 中进行基本的图像处理,包括加载图像、转换为灰度图像、进行边缘检测,然后显示结果。byte在这个示例中,我们使用了三个PictureBox控件来显示原始图像、灰度图像和边缘检测后的图像。

zhangzhechun的专栏 670

Git 学习笔记

Git是一个开源的、免费的、分布式的版本控制系统。它能够跟踪文件的变化,记录历史版本,允许多人协作开发。

m0_75219675的博客 1176

系统安装(kuntaiR522 kvm安装)

鲲泰R522服务器kvm安装rocky

weixin_46396917的博客 1822

git使用整理

the stupid content tracker git是一个分布式的版本控制系统,是由伟大的程序员Linus开发而成。git的本意是饭桶,无用的人,烂人。 I’m an egotistical bastard, so I name all my projects after myself. First Linux, now git. 与传统的集中式版本控制系统相比,两者的区别是:集中式版...

data_fan 266

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【学习笔记】GitModel统计分析

“Datawhale开源项目:GitModel统计分析”学习笔记

Statistics and Code 1007

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

探索 GitModel:一款用于管理 Git 数据的可视化工具

Git 是目前广泛使用的版本控制系统,在软件开发过程中发挥着至关重要的作用。然而,对于大型项目或复杂的代码库而言,理解和跟踪 Git 的提交历史可能是一项挑战。这就是 GitModel 出现的地方。 ## 什么是 GitModel? GitModel 是一个开源的 Python 库,它提供了一种将 Git 提交历史转换为图形模型的方法。通过将 Git 数据表示为一种结构化的数据模型,GitMo

gitblog_00007的博客 1110

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

开源项目GitModel简介及新手指南

GitModel是一个基于Ruby语言的持久化框架,该框架遵循ActiveModel标准,利用Git进行版本控制和远程数据同步。这意味着,它将数据库视为一个Git仓库,允许你在多个机器间同步数据,并且能够利用Git的分支和合并特性来管理数据的不同状态。GitModel设计为无模式(NoSQL)存储,使得每个记录都是正常的Ruby对象,支持任意Ruby类型的属性甚至大量二进制数据。其独特之处在于数据

gitblog_00883的博客 460

git:git modules

1、背景;2、概念介绍;3、使用方法;4、项目实践;5、留言必回。

snow的博客 9382

网络工程师必备:NatTypeTester深度解析RFC3489和RFC5780标准

在当今复杂的网络环境中,NAT类型测试已成为网络工程师不可或缺的技能。📡 NatTypeTester作为一款专业的网络工具,基于STUN协议帮助用户准确检测网络NAT类型,是网络调试和故障排查的得力助手。 ## 什么是NAT类型测试? NAT类型测试是通过STUN服务器检测网络地址转换设备行为的过程。NatTypeTester实现了RFC3489和RFC5780两个重要标准,能够识别全锥型、

gitblog_01044的博客 526

Git 数据模型分析-1

//注:所有图片来源于《Git Internals》PDF文档。 昨日些许郁闷,都是《Git Internals》这本书弄得。  Git 简介   Git 是一个SCM版本管理工具,始作者是Linus Torvalds,也就是linux之父。 Git 最初用一些脚本语言实现(Shell, Perl)等,后来用C语言改写,性能显著提高。 Git 有些独特

杜汪洋的专栏 1453

深入浅出git(一)——数据模型

自2005年诞生以来,git 已经在开源世界中大受欢迎,我们中的许多人也在我们的工作岗位上使用它。 它是一个很棒的VCS工具,具有很多优点,但易于学习并不是其中之一。 对于 git 如果只会死记硬背命令那么要不了多久你就会忘记,然后一而再而三的背诵,无疑让人很受打击,在我看来,熟悉使用 git 甚至开始喜欢它的唯一方法是了解它如何在内部工作。 git 命令只是对数据存储的抽象,如果不了解 git ...

zy353003874的博客 465

git数据模型

一.准备工作 1.初始化仓库 $ git init 在当前工作目录下创建一个 .git目录,其结构如下: 主要关注objects目 2.提交文件 touch Main.java 输入内容 public class Main { public static void main(String[] args) { System.out.println("Hello World"...

游戈程序员 253

gitmodel学习笔记(一):利用sympy分析高等数学

本篇是在复习到中途参加的一个关于gitmodel的学习活动,本系列分为三个部分,分别为高等数学、线性代数以及概率论与数理统计。本篇为第一篇——利用sympy分析高等数学,看完活动文档,查找了相关资料后,汇成笔记在这里记录一下。sympy包相当于让python具备了MATLAB与mathematica相同的解部分数学问题的能力,但是也只是能初步解决一些并不复杂的例子,而且因为还是依赖于python的输出终端,感觉output打印出来的结果没有经过太多美化,不如mathematica足够赏心悦目,但至少还是可以

submarineas的博客 1342

Visualizing the Git data model

I wrote a small tool git-graph.py over the weekend which can be used to generate the object graph of a Git repository. The primary purpose is to help Git learners better understand the Git data model ...

weixin_34209406的博客 149

git submodule的使用

转自: 开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的版本管理是个麻烦的事情。今天无意中发现了git的git submodule命令,之前的问题迎刃而解了。 添加 为当前工程添加submodule,命令如下: git submodule add 仓库地址 路径 其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前

wangjia55的专栏 14万+

Git学习之Git模型

1 Git简介 Git 是一个分布式版本控制工具(便于代码保存,追踪代码的修改和代码回退),它的作者开发了Linux的 Linus Torvalds ,git目前在版本管理中应用十分普遍,本篇文章来自《https://nvie.com/posts/a-successful-git-branching-model/》和自己的理解。 git和其他版本管理工具的区别: 学过git的一定对这张图很熟悉,我...

lidongxiu0714 5026
上一篇: 【Missing Semester L5】命令行环境Command-line Environment(进程控制、tmux、别名、配置、SSH)
下一篇: 微信小程序开发二三事
BeforeEasy
博客等级 码龄10年 92粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值