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.

~/.bashrc в конце впишите такие строки:

1
2
export GITFTPUSER='имя пользователя'
export GITFTPPASS='пароль'

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
92
93
94
95
96
97
98
99
#!/bin/bash
# sudo apt-get update && sudo apt-get install lftp

#1. gitftppush <current brunch >
#2. gitftpfetch # all
#3. gitftppull <current branch>

# ENV поместите в environment
#GITFTPUSER='имя пользователя'
#GITFTPPASS='пароль'

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:log yes
#set xfer:log-file /tmp/lftp.log
#set xfer:max-log-size 1048576
set xfer:max-redirections 10
#set xfer:verify-command /usr/share/lftp/verify-file
open ftp://pavlovma007.myjino.ru --user '$GITFTPUSER' --password '$GITFTPPASS'
mkdir -f branches
#get wp-config-sample.php -o sample.php
rm "branches/$branchname.bundle"
put "/tmp/gitftp/$branchname.bundle" -o "branches/$branchname.bundle"
EEE
) && echo 'SUCCESS'

}
#push
#clean

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:log yes
#set xfer:log-file /tmp/lftp.log
#set xfer:max-log-size 1048576
set xfer:max-redirections 10
open ftp://pavlovma007.myjino.ru --user '$GITFTPUSER' --password '$GITFTPPASS'

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//' )
}
#pull


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