Предложить материал: @developer_tools_suggestion_bot
По вопросам рекламы: @account_managerTG
Авторы: @katetheriver
Post #251
5.18K
DE @developer_tools
Showing posts older than #252 · Back to latest
git initТеперь как это можно сделать с помощью низкоуровневых команд git:
echo "text" >>1.txt
git add 1.txt
git commit -m "commit"
echo "text1" >> 1.txt
echo "text" >> 2.txt
git add .
git commit -m "commit 2"
git initВот и все.
echo "text" >> 1.txt
git hash-object -w 1.txt
git update-index --add 1.txt
git write-tree
echo "commit" | git commit-tree <tree>
echo "text1" >> 1.txt
echo "text" >> 2.txt
git hash-object -w 1.txt
git hash-object -w 2.txt
git update-index --add 2.txt
git update-index 1.txt
git write-tree
echo "commit 2" | git commit-tree <tree> -p <pcommit>
.git директории, в которой есть все версии и состояния проекта. tree #{text.lenght}\0zlib.[1]: import hashlib
In [2]: from hashlib import sha1
In [3]: sha = hashlib.sha1()
In [4]: line = "developer tools test line"
In [5]: header = f"blob {line.__len__()}\0"
In [6]: content = (header + line).encode()
In [7]: sha.update(content)
In [8]: sha.hexdigest()
Out[8]: '7f0571380d1f5e2a2fb13bb25eeefe5761895e7a'
In [9]: import zlib
In [10]: zlib.compress(content)
7f0571380d1f5e2a2fb13bb25eeefe5761895e7a пойдут как название директории, а остальные в название файла. git hash-object то получим всего один новый blob файл. git write-tree то увидим в файле дерева имя этого blob-a накатываемого на оба файла.100644 blob <hash> first_file.txtP.S. Последние статьи были исключительно про git. Я еще много чего хочу рассказать по этой теме, потому могу разбавлять ленту более профильным контентом ( инструменты, плагины, расширения итд).
100644 blob <hash> second_file.txt
git hash-object -w filename.txt она делает blob файл с вашими данными и сохраняет себе в objects.git status все еще будет пуст, так как индекса еще нет, но git уже сохранил себе версию этого файла.echo "first version" > new_file.txtУ вас появляется файл
git hash-object -w new_file.txt
new_file.txt с текстом first version и появляется файл de8d69c9026be2a49f540fda12f3e755a33e6c в папке 22 с таким же текстом.echo "second version" > new_file.txtУ нас появляется доп файл
git hash-object -w new_file.txt
7ac37bb280ccd34b350a59ba440614d9106e41 в папке ad с текстом second version
Теперь с помощью git cat-file -p 22de8d69c9026be2a49f540fda12f3e755a33e6c > new_file.txt можно переключиться на старую версию.git add.git add, git commit, git merge итд это "высокоуровневые" врапперы над низкоуровневыми командами вроде git update-index, git hash-object, git cat-file и других..git и представляет собой своего рода файловую систему с файлами и папками.tree -aУпустим пока все файлы кроме основных: HEAD, index, objects, refs.
.
└── .git
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs
├── heads
└── tags
refs - папка содержит ссылки на обьекты коммитов.objects - папка git-обьектовindex - содержимое индексаHEAD - содержит ссылку на актуальное состояние.hooks которае содержит "тригеры" на на различные действия или папка config с доп настройками для этой репы не являются частью "двигателя" гит.