GIT проекты korni3 ссылки

github.com

Здесь я помещу и буду обновлять список ссылок и способов доступа к коду проекта корни.

Не для всех проектов я использую github.com , есть и свой альтернативный способ групповой работы с git без этого сервиса.

  1. Центральная технология опубликавана на github.com, репозиторий Korni , это сама утилита для работы с данными и для сборки локальной БД из спец файлов korni и описание ключевых идей. это “джин , выпущенный из бутылки” - образцовый пример реализации (пока лишь на с++)
  2. Исходники программы Youtube (yt) , точнее 2+ програмы : yt-buckuper - утилита для сохранения видео с Youtube; приложение на qml - сам yt просмотрщик, исходники тут

gitftp - работа с git через ftp

Есть у меня скрипт для работы с git через ftp, я им пользуюсь, чтобы синхронизировать работу с нескольких машин и аккаунтов.

Скрипт имеет команды:

  • gitftp push [branchname] выгружает на ftp сервер (в спец определенную папку) bundle истирии текущей (если не указать параметр), или указанной ветки текущего git репозитория. это аналог git push
  • gitftp pull [branchname] с сервера забирается bundle файл истории указанной ветки и испортируется в текущий git репозиторий в другую локальную ветку other-[branchname] , чтобы программист мог ознакомится с содержимым и предпринять например git merge новой ветки в текущую. Если не указать параметр branchname , то утилита возьмёт имя текущей ветки.

[!IMPORTANT]

Важно, что выгрузка на сервер идёт именем файла, который называется именем ветки, Это происходит для всех репозитариев, поэтому важно называть ветки так, чтобы эти имена включали и название репозитария, например repo1_branch100500 - хорошее название, develop - плохое название, потому что тогда ветки разных репозиторариев могут на сервере ftp пересекаться на одном и тоже файле.

Примеры работы со скриптом.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# назовите вашу ветку так, чтобы там было и название репозитария (реп sync_app ветка flet)
$ git checkout -b sync_app-flet
$ gitftp push
Перечисление объектов: 46, готово.
Подсчет объектов: 100% (46/46), готово.
Сжатие объектов: 100% (41/41), готово.
Всего 46 (изменения 8), повторно использовано 0 (изменения 0)
SUCCESS
# чтобы забрать изменения от других разработчиков (pull текущей ветки)
$ gitftp pull
bn
branch = sync_app-flet
Пакет содержит эту 1 ссылку:
6cb5925061c8cbbcb9e5ab9a83b4545bdb33c160 refs/heads/sync_app-flet
Пакет содержит полную историю.
/tmp/gitftp/sync_app-flet.bundle в порядке
Из /tmp/gitftp/sync_app-flet.bundle
# смотрим что с git ветками
$ git branch -a
flet
master
other-sync_app-flet
other-sync_app_master
* sync_app-flet
sync_app_master
# видно, что возникла ветка `other-sync_app-flet` - она пришла с сервера.
# так же пришла бы ветка `other-abc` если бы мы запросили `gitftp pull abc`

# можно сравнить ветку с текущей
git diff other-sync_app-flet
# или смержить изменения в свою ветку (только если есть у них общие камиты в прошлом)
git merge other-sync_app-flet

Исходный код скрипта

Поставьте зависимости sudo apt-get install lftp.

Создайте .env в корне проекта с настройками вашего FTP-сервера:

1
2
3
4
GITFTP_HOST=pavlovma007.myjino.ru
GITFTP_PORT=21
GITFTP_USER=ваш_username
GITFTP_PASS=ваш_пароль

Cкрипт на bash должен у вас быть в $PATH.

gitftp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/bin/bash
# sudo apt-get update && sudo apt-get install lftp

# Загружаем настройки из .env
ENV_FILE=".env"
if [ -f "$ENV_FILE" ]; then
source "$ENV_FILE"
else
echo "Ошибка: не найден $ENV_FILE"
exit 1
fi

FTP_URL="ftp://$GITFTP_HOST${GITFTP_PORT:+:$GITFTP_PORT}"

clean() {
mkdir -p /tmp/gitftp
rm -rf /tmp/gitftp/*
}

push() {
clean

branchname=$( git branch | grep '^*'| head -n 1| awk '{print $2}' )
git bundle create --progress /tmp/gitftp/$branchname.bundle $branchname

(lftp <<EEE
set dns:order "inet6 inet"
set file:charset UTF-8
set ftp:timezone ""
set net:max-retries 2
set net:timeout 30
set ssl:verify-certificate no # !!!
set xfer:max-redirections 10
open "$FTP_URL" --user "$GITFTP_USER" --password "$GITFTP_PASS"
mkdir -f branches
rm "branches/$branchname.bundle"
put "/tmp/gitftp/$branchname.bundle" -o "branches/$branchname.bundle"
EEE
) && echo 'SUCCESS'

}

pull() {
clean
if [ -z "$1" ]; then
branchname=$( git branch | grep '^*'| head -n 1| awk '{print $2}' )
else
branchname="$1"
fi
echo branch = $branchname
lftp <<EEE
set dns:order "inet6 inet"
set file:charset UTF-8
set ftp:timezone ""
set net:max-retries 2
set net:timeout 30
set ssl:verify-certificate no # !!!
set xfer:max-redirections 10
open "$FTP_URL" --user "$GITFTP_USER" --password "$GITFTP_PASS"

mirror --only-missing -P 3 branches /tmp/gitftp
EEE
git bundle verify "/tmp/gitftp/$branchname.bundle" \
&& git fetch "/tmp/gitftp/$branchname.bundle" $branchname:other-$branchname \
|| (echo 'we has branches...' ; echo; ls /tmp/gitftp|sed -e 's/.bundle//' )
}


mkdir -p /tmp/gitftp/
case $1 in

push)
push
;;

pull)
bn=$2
echo bn $bn
pull $bn
;;

*)
echo 'important! name git brunch like : reponame_branchname (include repo-name) '
echo 'push # current bunch'
echo 'pull [<branchname>] # создает у вас бранч other-$branchname чтобы вы могли git merge его'
echo 'clean # - clean /tmp/gitftp/*'
;;
esac

exit 0