Использование Git с VB6

У нашей компании большая кодовая база на VB6, и в настоящее время мы используем VSS, который, несмотря на все то, что мы ненавидим в нем, по крайней мере, интегрируется в VB6 IDE.

Моя собственная команда, использующая .NET, сейчас изучает альтернативные SCM, такие как мой личный фаворит, Git. С помощью расширений Git кажется, что мы сможем довольно хорошо интегрировать команды Git в среду разработки Visual Studio.

Однако был задан вопрос: можно ли использовать Git и для нашей кодовой базы VB6?

Конечно, я предполагаю, что сами файлы будут нормально работать в репозиториях git, но, несомненно, разработчики будут жаловаться, если им придется использовать командную строку для управления всем исходным кодом. Но есть ли у кого-нибудь опыт использования VB6 и Git? Возможна ли интеграция из среды VB6 IDE? Или, может быть, отсутствие интеграции с IDE не так уж и сложно?

И получу ли я значок за то, что первым создал абсурдную комбинацию тегов [vb6] и [git]?


person Gavin    schedule 17.03.2010    source источник
comment
лично мне не нравится интеграция IDE, кроме как сообщать о состоянии (зеленый свет и т. д.), у меня никогда не было замены, которую я лично предпочитаю внутри IDE, все они, как правило, являются сторонними программами, интегрированными в оболочку или моим личным фаворитом, командная строка. И да, вы обязательно должны получить значок для создания тегов vb6 и git :)   -  person krystan honour    schedule 17.03.2010
comment
vb6 и git в одном предложении? да, определенно заслуживает значка   -  person hasen    schedule 17.03.2010


Ответы (7)


Я нашел, что это решение работает в нашей ситуации. Он добавляет немного больше к предыдущим ответам и решает все наши МНОГИЕ проблемы, заставляя наш проект работать с git.

.gitattributes

# Set the default behavior, in case people don't have core.autocrlf set.
* text eol=auto
*.bas text eol=crlf
*.frm text eol=crlf
*.log text eol=crlf
*.vbp text eol=crlf
*.cls text eol=crlf
*.vbw text eol=crlf
*.dsr text eol=crlf
*.ini text eol=crlf
*.res binary
*.RES binary
*.frx binary
*.exe binary
*.dll binary
*.ico binary
*.gif binary
*.ocx binary
*.tlb binary
*.ocx.bin binary
*.ism binary
*.bin binary
*.aps binary
*.ncb binary
*.exe.compat binary
*.ocx.compat binary

.gitignore

.DS_Store
.Trashes
*.vbw
*.csi
*.exp
*.lib
*.lvw
*.dca
*.scc
*.tmp
<name of built binary, exe, dll or ocx>
person KeithTheBiped    schedule 18.05.2016

Уже около года использую Git для управления проектами VB6. Ни разу не встречал интеграции с IDE. Лично мне нравится командная строка, поэтому особо не искал. Я столкнулся с двумя основными проблемами:

  1. VB6 IDE не отслеживает файлы проекта. Если какой-либо из них был изменен извне (например, с помощью 'git reset', 'git checkout'), проект необходимо повторно открыть, чтобы отразить изменения.
  2. VB6 IDE иногда меняет регистр параметров события или переменных при загрузке проекта, поэтому никогда не безопасно использовать 'git commit --all', если вы не хотите, чтобы при изменении кода было много мусора.
person Blasio    schedule 08.04.2010

Вы должны создать файл .gitattributes, чтобы использовать окончания строк Windows (crlf), потому что git родился в unix.

# Declare files that will always have CRLF line endings on checkout.
*.vbp text eol=crlf
*.frm text eol=crlf
*.cls text eol=crlf
*.bas text eol=crlf
*.dsr text eol=crlf
*.ini text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.frx binary
*.exe binary
*.dll binary
*.ocx binary

Также создайте файл .gitignore со следующими строками:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.vbw
*.tmp
*.scc
*.dca
person togobites    schedule 06.02.2016
comment
что это за временные файлы * .dca? - person Zoba; 04.01.2018
comment
Файлы .dca - это временные файлы Data Dynamics Active Reports. - person togobites; 06.02.2018

Это действительно дополнение к другим отличным комментариям KeithTheBiped и др ...

Но можно несколько принудить Immediate Window в VB6, чтобы оно работало как современное окно терминала, с некоторыми оговорками. Если мы создадим вспомогательную функцию для запуска команды, каким-то образом зафиксируем вывод, а затем воспользуемся Debug.Print, чтобы передать его обратно в окно Immediate, ПОДОБНО окну терминала, но, конечно, без каких-либо интерактивных элементов.

Это работает для большинства команд, но не может захватить часть вывода в фазе git push. Приемлемый компромисс для удобства без оболочки (imo).

Мы можем сделать это с помощью командной строки (cmd.exe /c), используя каналы 1> и 2>, нацеленные на временные файлы. Я не предоставляю пару базовых функций, но предоставляю источники, если у вас их еще нет.

Рассмотрим следующую функцию:

Public Function RunCmdToOutput(ByVal cmd As String, Optional ByRef ErrStr As String = "") As String
Const p_enSW_HIDE = 0

On Error GoTo RunError

  Dim A As String, B As String
  A = TempFile
  B = TempFile

  ShellAndWait "cmd /c " & cmd & " 1> " & A & " 2> " & B, p_enSW_HIDE

  RunCmdToOutput = ReadEntireFileAndDelete(A)
  ErrStr = ReadEntireFileAndDelete(B)

  Exit Function

RunError:
  RunCmdToOutput = ""
  ErrStr = "ShellOut.RunCmdToOutput: Command Execution Error - [" & Err.Number & "] " & Err.Description
End Function

Тебе понадобится:

  • TempFile - возвращает уникальное и несуществующее имя файла, к которому ваша программа имеет доступ для чтения / записи. Вероятно, следует использовать GetShortPathName API, чтобы сократить длинные имена путей.
  • ShellAndWait - Стандарт «запустить процесс и дождаться его завершения».
  • ReadEntireFileAndDelete - Именно то, что написано ... Захватите содержимое, удалите файл, верните строку.

Как только вы это сделаете и сможете успешно запустить любое простое выполнение и вывести в окно немедленного выполнения, например:

?runcmdtooutput("ver")
Microsoft Windows [Version 10.0.16299.309]

Отсюда вы можете запускать Git и отображать БОЛЬШИНСТВО вещей в окне Immediate и использовать его так просто, но мы можем добиться большего.

Предполагая, что вы уже установили Git из командной строки и путь обновлен, чтобы он стал доступен, вы можете создать несколько новых функций (надеюсь, в модуле):

Private Function GitCmd(ByVal C As String, Optional ByVal NoOutput As Boolean = False) As String
  Dim ErrSt As String
  GitCmd = RunCmdToOutput(C, ErrSt)
  If Not NoOutput Then Debug.Print GitCmd ' Because it also returns the string
  If ErrSt <> "" Then Debug.Print "ERR: " & ErrSt
End Function

Public Function Git(ByVal C As String) As Boolean
  GitCmd "git " & C
  Git = True
End Function

Отсюда вы можете ПОЧТИ запускать команды Git прямо из окна. Помните, что Git () - это функция, поэтому вы должны передать аргумент в виде строки ... Только один необходимый символ. Конечно, VB будет автоматически заполнять строку, поэтому вам совсем не НУЖНО завершение, но я его включу. Используйте синтаксис:

Git "status"
Git "add ."
Git "commit -m ""Some Git Commit"""
Git "pull -r"
Git "push"

Он не позволяет использовать интерактивные команды git (git add -p), но вы можете просто перебрать его (git add . -f). Но команды выполняются и напрямую отображают свой вывод в окне Immediate без особых усилий.

git "status"
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
...

Вы уловили идею.

Оттуда вы также можете автоматизировать вещи. Создайте вспомогательные функции для пакетной обработки часто используемых команд Git и т. Д. Или просто устраните неуклюжий синтаксис. С RunCmdToOutput вы также можете переделать некоторые из них, чтобы использовать MsgBox, если хотите, но я думал, что Immediate Window было достаточно интуитивно понятным.

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

Public Function IsIDE() As Boolean
  On Error GoTo IDEInUse
  Debug.Print 1 \ 0 'division by zero error - Debug is ignored by compile
  IsIDE = False
  Exit Function
IDEInUse:
  IsIDE = True
End Function

Public Function GitStatus()
  If Not IsIDE Then Exit Function
  GitCmd "git status"
  GitStatus = True
End Function
person User51    schedule 04.04.2018
comment
В качестве побочного примечания, хотя я использовал вариант вышеупомянутого, он требует что-то вроде функции, такой как RestartIDE (), которую я также использую всякий раз, когда делаю git pull -r. Он выполняет новый запуск IDE и выполняет API KillProcess () для текущего ... Немного варварский, без сомнения ... Убедитесь, что вы сначала сохранили все изменения ... Но, поскольку VB6 не перезагружает файлы изменен вне среды IDE, а плагины, такие как VB Accelerator, не обнаруживают изменений, внесенных из Git, когда он запускается из окна Immediate Window, для обнаружения изменений файлов требуется некоторая грубая обработка. - person User51; 07.07.2018

Вы лучше всех знаете своих разработчиков. Будут ли они возражать против использования командной строки? Заинтересованы ли они в интеграции IDE? Это личные предпочтения.

Убедитесь, что самые уважаемые разработчики понимают преимущества git и принимают решение.

Имейте в виду, что некоторые исходные файлы VB6 являются двоичными и никогда не следует объединять: например .frx файлов. Я не знаю git, поэтому не знаю, проблема в этом.

person MarkJ    schedule 17.03.2010

Что такого особенного в VB6 в качестве базы кода (то есть текстовых файлов), что делает его непригодным для git?

Совсем другое дело - культура: если у вас много некомпетентных разработчиков, которые не умеют работать с командной строкой, лекарство, вероятно, будет заключаться в бегстве от VB6, насколько это возможно.

Единственная потенциальная проблема заключается в том, что окна в мире git - это что-то вроде гражданина второго сорта. Вы можете попробовать bazaar или mercurial, если обнаружите, что git не очень хорошо работает в вашей среде.

person hasen    schedule 17.03.2010
comment
Если вы используете msysgit в Windows, у вас не должно быть проблем с тем, чтобы быть гражданином 2-го класса. Я использую его для подключения к TFS (через SVNBridge, а затем git-svn), и у меня нет с ним проблем (кроме скорости SVNBridge). Исторически это может быть правдой, но не сейчас. - person Leom Burke; 17.03.2010
comment
Итак, VB6 просто должен быть SOB. - person hasen; 18.03.2010
comment
Другие языки настолько примитивны, что основаны на технологии программирования 1950-х годов. - person Bob77; 08.08.2016

Мы этим занимаемся. Мы добавили в .gitIgnore следующее:

  • * .csi
  • * .exp
  • * .lib
  • * .lvw
  • * .vbw
  • MyProject .dll
person Mark Dornian    schedule 11.01.2016