博客专区 > tsl0922的博客 > 博客详情
使用 git 命令行实现 commit 到 bare 仓库
tsl0922 发表于3年前
使用 git 命令行实现 commit 到 bare 仓库
  • 发表于 3年前
  • 阅读 517
  • 收藏 2
  • 点赞 0
  • 评论 0

1小时搭建人工智能应用 让技术更容易入门>>>   

摘要: git 提供了很多的底层(plumbing)命令,大多数情况下你不会用到它。本文演示下部分底层操作,实现了一个没有高层(porcelain)命令实现的操作: commit 到一个 bare 仓库。

这是一个shell脚本,可以直接执行,观察它的输出,然后再去检查bare仓库,看看结果是否正确。

#!/bin/sh

cd ~

rm -rf bare.git

echo "-------> create bare repo"
echo ""
git init --bare bare.git
cd bare.git

echo ""
echo "-------> initial commit: test.txt"
echo ""
# create object
obj=`echo 'test content' | git hash-object -w --stdin`
# create index
git update-index --add --cacheinfo 100644 $obj test.txt
# create tree
tree=`git write-tree`
git ls-tree $tree
echo ""
# commit
commit=`echo 'initial commit' | git commit-tree $tree`
git log --stat --pretty=oneline $commit

echo ""
echo "-------> second commit: new.txt"
echo ""
# second commit
obj1=`echo 'new content' | git hash-object -w --stdin`
git update-index --add --cacheinfo 100644 $obj1 new.txt
tree1=`git write-tree`
git ls-tree $tree1
echo ""
commit1=`echo 'second commit' | git commit-tree $tree1 -p $commit`
# create refs
git update-ref refs/heads/master $commit1
# update head
git symbolic-ref HEAD refs/heads/master
git log --stat --pretty=oneline HEAD

echo ""
echo "-------> third commit: edit test.txt"
echo ""
# delete index
rm index
# create index from HEAD
git read-tree HEAD
obj2=`echo 'edited test content' | git hash-object -w --stdin`
git update-index --cacheinfo 100644 $obj2 test.txt
tree2=`git write-tree`
git ls-tree $tree2
echo ""
commit2=`echo 'third commit' | git commit-tree $tree2 -p $commit1`
# update refs
git update-ref refs/heads/master $commit2
git log --stat --pretty=oneline HEAD
标签: git 版本控制
共有 人打赏支持
tsl0922
粉丝 257
博文 26
码字总数 11714
作品 1
×
tsl0922
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: