|
Версионирование файлов v2 | ☑ | ||
---|---|---|---|---|
0
E-rsh_KUS
03.08.21
✎
11:32
|
В продолжении темы от ildary Версионирование файлов
Нужна именно такая фича, раньше был DropBox и было очень удобно, во внешней обработке что то слетело - а ты раз старую версию поднял и посмотрел/доказал что ты не жираф и пр. Но нужно именно локально. Пробовал в Windows 10 включить версионность, но он их делает не пойми когда (и 100% не после каждого сохранения файла). Если можно винду как то настроить - буду рад помощи. Гугл уже достаточно копал - пока без результатов. |
|||
1
Aleksey
03.08.21
✎
11:47
|
гит?
|
|||
2
E-rsh_KUS
03.08.21
✎
11:52
|
(1) гит на автомате может делать пуши?
Нажал в 1С сохранить обработку (могу и через закрытие её, чтоб освободить) - а он сам сделал версию? Мне как таковой diff не нужен между версиями (да и в обработках она не сильно поможет, если не заморачиваться с xml) |
|||
3
Garykom
гуру
03.08.21
✎
11:59
|
(0) почитай ближе к концу ветки DevOps инструменты для платформы 1С
|
|||
4
E-rsh_KUS
03.08.21
✎
12:33
|
(3) Не увидел там решения проблемы. Дедубликация - это по простому просто сжатие данных. А предложение всяких Zfs это конечно здорово, но Win 10, да и не хочется так глобально заморачиваться, ради простого резервного копирования по событию. В теории, это должен быть демон/служба которая через хуки следит за изменением файлов и делает резервные копии, или дергает какие то функции винды принудительного создания версии файлов.
Еще раз повторю, у Win10 есть версионность, но я не могу понять как она и когда работает. Поставил в параметрах архивации (именно там хранятся другие настройки архивации/версионности) архивировать каждые 15 минут, но всё равно старые версии у каких то файлов есть, у каких то нет, хотя точно пересохранял. Можно конечно натравить на это winrar и через батник там накидать ключей, вроде около того он можен, но это такой геморой.... А в DropBox было все просто и удобно |
|||
5
Злопчинский
03.08.21
✎
12:50
|
По идее это можно замутить через Снегопат или аналогичные автоматизации конфигуратора
|
|||
6
E-rsh_KUS
03.08.21
✎
12:54
|
По версионности win10, результаты тестов показали, что если файл открыт и был изменен, он не попадет в версионность пока не закрыть (в отличии от dropbox). Но похоже цикл бекапа идет в "попытке" поэтому никаких ошибок, а просто молчком. НЕНАВИЖУ подобное использование попыток.
|
|||
7
E-rsh_KUS
03.08.21
✎
13:20
|
В интернете случайно нашел вот такую статью, в комментах есть много чего полезного, в .т.ч. про альтернативные проги https://www.outsidethebox.ms/18432/
|
|||
8
Злопчинский
03.08.21
✎
13:25
|
(6) Переходи на 77, там есть патч от Ромикса, который при каждом сохранении обработки в конфигураторе делает бэкап
|
|||
9
fisher
03.08.21
✎
13:27
|
(2) Сам не может. Гит как таковой - достаточно низкоуровневый инструмент. Но заскриптовать автопуш по идее не должно стать проблемой. Пусть не по событию, но по регламенту тоже норм будет. Те, кто разработку ведет через гит обычно внешние обработки тоже через гит версионируют в отдельном репозитории. Только пушат осознанно. И честно говоря необходимости в автопушах я не вижу. Удобно же, когда можно будет видеть осознанно описанные коммиты, а не тупой список автосохранений.
|
|||
10
fisher
03.08.21
✎
13:30
|
Только обычно используют доп-инструменты, чтобы обработки в гите держать "препарированными" (разложенные по файликам, как конфу).
|
|||
11
ildary
03.08.21
✎
14:56
|
(0) я недавно писал на AutoIt утилиту, которая мониторит изменения в папке и создает копию файла в отдельную папку. Могу посмотреть, как она себя ведёт на последней Win10.
|
|||
12
E-rsh_KUS
03.08.21
✎
15:33
|
(11) AutoIt говоришь... интересно. Нужно посмотреть. А там есть отдельная функция мониторинга или проверка по циклу даты изменения ?
|
|||
13
E-rsh_KUS
03.08.21
✎
15:36
|
(9) Я работаю практически соло, да и где не соло, все равно обработки обычно делятся. А тратить доп. время на коммиты (да и за частую поправил тут немного, там...), в общем лениво :)
|
|||
14
ildary
03.08.21
✎
15:49
|
(12) AutoIt - это что-то вроде VBA для сисадмина, хороша тем, что библиотек написано на все случаи жизни. Я посмотрел свою старую разработку - она уже не работает под Win10, нашёл другую библиотеку, смотрю, что она умеет. Вот примерный список отлавливаемых событий:
$FILE_NOTIFY_CHANGE_FILE_NAME $FILE_NOTIFY_CHANGE_DIR_NAME $FILE_NOTIFY_CHANGE_ATTRIBUTES $FILE_NOTIFY_CHANGE_SIZE $FILE_NOTIFY_CHANGE_LAST_WRITE $FILE_NOTIFY_CHANGE_LAST_ACCESS $FILE_NOTIFY_CHANGE_CREATION $FILE_NOTIFY_CHANGE_SECURITY |
|||
15
mistеr
03.08.21
✎
15:55
|
(4) FreeFileSync умеет мониторить изменения файлов и запускать бэкап.
|
|||
16
ildary
03.08.21
✎
16:02
|
(15) FreeFileSync делает бекап в стиле создания отдельной новой копии файла или простая синхронизация с другой папкой без новой копии типа ДатаВремяИмяФайла? Я им когда-то пользовался, пока не наткнулся на Syncthing.
|
|||
17
mistеr
03.08.21
✎
16:04
|
(16) Синхронизацию, не бэкап. Но запускать по событию можно что угодно.
|
|||
18
ildary
03.08.21
✎
16:06
|
Вот работающий код, для него потребуется библиотека RDC.au3 и файлы RDC.dll или RDC_x64.dll, которые брать надо тут: https://www.autoitscript.com/forum/applications/core/interface/file/attachment.php?id=53030, сама страница библиотеки: https://www.autoitscript.com/forum/topic/167024-rdc-udf-readdirectorychanges-wrapper
Собственно вот код утилиты (проверил, работает под Win10 20H2), код не ругать, писал из горящего танка: #include <File.au3> #include <Misc.au3> ; _Singleton #Include <APIConstants.au3> #Include <RDC.au3> ; https://www.autoitscript.com/forum/topic/167024-rdc-udf-readdirectorychanges-wrapper/ #AutoIt3Wrapper_icon=1c.ico Dim $MonitorFolder = "D:\_My\" Dim $SaveFolder = "D:\_My\Я_СТАРОЕ\" Dim $ExtensionsToMonitor = "erf epf txt xml" ; звездочки нельзя :( $ExtensionsToMonitor = StringLower($ExtensionsToMonitor) Dim $ExtensionsSkip = "" ; звездочки нельзя :( _Main() Func _Main() If _Singleton(@ScriptName, 1) = 0 Then Exit ReadCfg() _RDC_OpenDll() If @Error Then ConsoleWrite('Error: _RDC_OpenDll() - ' & @Error & @CR) Exit EndIf ;~ ConsoleWrite('$MonitorFolder: ' & $MonitorFolder & @CR) $ID = _RDC_Create($MonitorFolder, 1, BitOR($FILE_NOTIFY_CHANGE_FILE_NAME, $FILE_NOTIFY_CHANGE_DIR_NAME, $FILE_NOTIFY_CHANGE_SIZE)) If @Error Then ConsoleWrite('Error: _RDC_Create() - ' & @Error & ', ' & @Extended & @CR) Exit EndIf While 1 ; Main Loop If $ID = -1 Then ContinueLoop EndIf $aData = _RDC_GetData($ID) If @Error Then ConsoleWrite('Error: _RDC_GetData() - ' & @Error & ', ' & @Extended & ', ' & _RDC_GetDirectory($ID) & @CR) _RDC_Delete($ID) ; Delete thread to avoid receiving this error! $ID = -1 ContinueLoop EndIf For $j = 1 To $aData[0][0] ;~ ConsoleWrite($aData[$j][1] & ' - ' & _RDC_GetDirectory($ID) & '\' & $aData[$j][0] & @CR) $FileFullName = _RDC_GetDirectory($ID) & '\' & $aData[$j][0] BackupFile($FileFullName) Next Sleep(500) WEnd EndFunc Func BackupFile($FileFullName) Local $sDrive, $sDir, $sFileName, $sExtension ConsoleWrite("$FileFullName: " & $FileFullName & @CRLF) If Not FileExists($FileFullName) Then ConsoleWrite("!Not exist: " & $FileFullName & @CRLF) Return EndIf $sAttribute = FileGetAttrib($FileFullName) If StringInStr($sAttribute, "D") <> 0 Then ConsoleWrite("!It's folder: " & $FileFullName & @CRLF) Return ; папка EndIf _PathSplit($FileFullName, $sDrive, $sDir, $sFileName, $sExtension) $sFileName = $sFileName & $sExtension $sExtension = StringRight($sExtension, StringLen($sExtension) - 1) If ($ExtensionsToMonitor <> "*") And (StringInStr($ExtensionsToMonitor, StringUpper($sExtension)) = 0) Then ConsoleWrite("!Bad extension: " & $sExtension & @CRLF) Return EndIf $sDir = $sDrive & $sDir ;~ ConsoleWrite("$sDir: " & $sDir & @CRLF) If StringInStr($sDir, $SaveFolder) <> 0 Then Return $SaveDir = $SaveFolder & StringRight($sDir, StringLen($sDir) - 3) ConsoleWrite("$SaveDir: " & $SaveDir & @CRLF) DirCreate($SaveDir) If Not FileExists($SaveDir) Then ConsoleWrite("!Not exist: " & $SaveDir & @CRLF) Return EndIf $sFileName = "" & @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & "-" & @MIN & "-" & @SEC & " " & $sFileName FileCopy($FileFullName, $SaveDir & $sFileName, 1) EndFunc Func ReadCfg() $CfgFileName = @ScriptName $CfgFileName = @ScriptDir & "\" & StringLeft($CfgFileName, StringInStr($CfgFileName, ".") - 1) & ".cfg" If Not FileExists($CfgFileName) Then MsgBox(4096, "Ошибка", "Файл настроек не существует: " & $CfgFileName) Exit EndIf $PassFile = FileOpen($CfgFileName, $FO_ANSI) If $PassFile = -1 Then MsgBox(4096, "Ошибка", "Не могу открыть файл настроек: " & $CfgFileName) Exit EndIf $MonitorFolder = FileReadLine($PassFile) If @error = -1 Then MsgBox(4096, "Ошибка", "Не получена папка проверки!") Exit EndIf $Pos = StringInStr($MonitorFolder, "//") If $Pos <> 0 Then $MonitorFolder = StringLeft($MonitorFolder, $Pos - 1) $MonitorFolder = StringStripWS($MonitorFolder, 1 + 2) If Not FileExists($MonitorFolder) Then MsgBox(4096, "Ошибка", "Папка проверки не существует: " & $MonitorFolder) Exit EndIf $SaveFolder = FileReadLine($PassFile) If @error = -1 Then MsgBox(4096, "Ошибка", "Не получена папка архивов!") Exit EndIf $Pos = StringInStr($SaveFolder, "//") If $Pos <> 0 Then $SaveFolder = StringLeft($SaveFolder, $Pos - 1) $SaveFolder = StringStripWS($SaveFolder, 1 + 2) If Not FileExists($SaveFolder) Then DirCreate($SaveFolder) If Not FileExists($SaveFolder) Then MsgBox(4096, "Ошибка", "Папка архивов не существует: " & $SaveFolder) Exit EndIf EndIf If StringRight($SaveFolder, 1) <> "\" Then $SaveFolder = $SaveFolder & "\" $Str = FileReadLine($PassFile) If @error = -1 Then Return $Pos = StringInStr($Str, "//") If $Pos <> 0 Then $Str = StringLeft($Str, $Pos - 1) $Str = StringStripWS($Str, 1 + 2) If $Str = "" Then Return $ExtensionsToMonitor = StringUpper($Str) EndFunc ; ReadLastPasswords |
|||
19
Йохохо
03.08.21
✎
16:22
|
||||
20
Йохохо
03.08.21
✎
16:23
|
работает по локалке
|
|||
21
Сармат
03.08.21
✎
16:33
|
(0) OneDrive, работает как часы. Заодно это еще и бекап в облаке. Двух зайцев одним выстрелом. Встроен в систему по родному. Обкатан годами.
|
|||
22
ildary
03.08.21
✎
16:34
|
(19) хорошая штука, сам пользуюсь, но для задачи (0) есть одно неудобство (возможно неважное) - копии будут создаваться на другом компьютере.
|
|||
23
МихаилМ
03.08.21
✎
16:52
|
wmi умеет отлавливать события записи в файл со времен win nt 4.0
|
|||
24
Aleksey
03.08.21
✎
17:10
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |