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

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

15 голосов
/ 17 марта 2010

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

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

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

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

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

Ответы [ 7 ]

14 голосов
/ 19 мая 2016

Я нашел, что это решение работает в нашей ситуации. Это добавляет немного больше к предыдущим ответам и решает все наши МНОГИЕ проблемы, заставляя наш проект работать с 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>
6 голосов
/ 08 апреля 2010

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

  1. VB6 IDE не контролирует файлы проекта, если какой-либо из них изменен извне (например, с помощью «git reset», «git checkout»), то проект необходимо повторно открыть, чтобы отразить изменения.
  2. VB6 IDE иногда изменяет регистр параметров или переменных события при загрузке проекта, поэтому никогда не безопасно использовать 'git commit --all', если вы не хотите много мусора с изменениями кода.
4 голосов
/ 17 марта 2010

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

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

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

3 голосов
/ 06 февраля 2016

Вы должны создать файл .gitattributes , чтобы использовать оконные строки (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
3 голосов
/ 11 января 2016

Мы делаем это. Мы добавили следующее к .gitIgnore

  • *. ИСК
  • *. Ехрх 1006 *
  • *. Lib
  • *. LVW
  • *. Ф
  • MyProject .dll
3 голосов
/ 17 марта 2010

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

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

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

2 голосов
/ 05 апреля 2018

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

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

Это работает для большинства команд, но не может захватить некоторые выходные данные в фазе 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 - только то, что он говорит ... Захватите содержимое, удалите файл, верните строку.

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

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

Отсюда вы можете запустить Git и отобразить MOST в окне 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
...