VMS GIT Client - thanks to Brett Cameron of VSI ---- BETA Only - IA64 ONLY...
Friday, April 22, 2016, 06:09 PM
Posted by Administrator
Note that the tool is for OpenVMS ia64 only at this time, although it should of course be possible to build it for Alpha 8.4. Also, note that the ZIP file was created on OpenVMS, so I would suggest extracting the contents on a VMS system!
The contents of the ZIP file are as follows:
Length Date Time Name
--------- ---------- ----- ----
6881280 01-17-2016 20:09 vgit2.exe
1367 01-13-2015 15:39 cert.pem
6882647 2 files
Vgit2.exe is the UNIX-style version of the tool. As I think I mentioned previously, there is a little more functionality available in the VMS CLI-based version, but any such additional functionality is quite minimal and (probably) likely to be little-used. The UNIX-style version is also a little more “user friendly” in that it contains some build-in usage notes (more on this later).
The certificate file (cert.pem) is required if you are going to be interacting with some service like GitHub or BitBucket.
Anyway, to get started, extract the contents of the ZIP file and copy the files into your preferred location. Next, perform the following tasks (or add the commands to login.com, or whatever):
• Define a foreign command for vgit2:
$ vgit2 :== $device:[path]vgit2.exe
• Define the logical name git$ssl_certs to point to the certificate file:
$ define git$ssl_certs device:[path]cert.pem
Next you’ll need to run the following command to set up some basic configuration details:
$ vgit2 config user -n username -e youremail
After this command completes, you should see in your login directory the file git.config, and it should contain the details that you specified in the above command. It is better to create this file before doing anything else to avoid being told by the program to do this the first time you come to do a push. Note that the values you specify are not particularly critical as they can be overridden if/when necessary; however if you will primarily be interacting with some service such as GitHub then you should specify your username for that service and the associated email address.
As mentioned above, the UNIX-style version has some level of built-in usage notes (which saves me typing a whole pile of notes on how to use the thing). For example, running the program without specifying a command or specifying an invalid command, you will get the following output:
Usage: EXEC14$DKA200:[CAMERON.vgit]vgit2.exe;9 <command> [options] [arguments]
add [-s] [-v] [-u] <file> ...
checkout [-s safe | create | force] [-a conflicts] [-r untracked | ignored] [<file> ...]
clone <uri> [<path>]
commit [-a] [-m <message> | -F <filename>]
config user [-s global | local] [-n <username>] [-e <email>]
diff [-s] [-c]
init [-b] [-q] [-s true | false | group | all | world | umask] [-t <file>] [-n (no initial commit)] [<path>]
merge [-s safe | create | force]
push [-t | <refspec>]
remote add <name> <uri>
rm [-b] [-s <stage>] <file>
status [-b] [-f short | long | porcelain]
tag -d <tag-name> | [-f] [-m <message>] <tag-name> [<commit> | <object>]
tag list [-l <number>] [pattern]
Repositories and your login directory must be on an ODS-5 file systems
Files must be stream-lf
This is a basic summary of the available commands. If you now want a few more details on a specific command, run the program specifying the command in question and supply some invalid option or leave out a required parameter. For example:
$ vgit2 init -h
init: illegal option -- h
Usage: init [-b] [-q] [-s true | false | group | all | world | umask] [-t <file>] [-n] [<path>]
-b Create a bare repository (has no working tree).
-q Quiet (only display errors and warnings).
-s <value> Repsoitory sharing (permitted values are "true", "false", "group",
"all", "world", and "umask")
-t <file> Specify a template directory.
-n Do not perform an initial commit.
<path> Directory where the repository is to be created (the directory is created
if necessary). If not specified, the current location is used.
You will notice that some commands map reasonably well to real git (although some options may not be available); other commands do not map quite so well (currently).
For the LLVM work John R mentioned, the compiler are using a primary repository on shared disk. Developers clone the repo into their private work areas and push changes back to the primary repo so that others can sync off that by doing a pull. My guess is that you will most likely want to use it with some service like GitHub, in which case typical usage will be pretty much exactly as per real git.
Some other points to note:
1. All files must be stream-lf. The program (currently) will exit with an error if you try to add a file to the repo that is not stream-lf. If for any reason the “add” command fails, note that nothing will have been added to the repository (it’s an all or nothing scenario), and you can safely fix up the problem (maybe you have to convert a file to stream-lf) and re-run the “add” command.
o When adding some number of files I would suggest using the “-v” (verbose) flag. This will allow you to see which file the add operation is failing on (probably because the file is not stream-lf).
2. ODS-5 only.
3. You may notice that it will be a little slow process to do an initial load or to clone repositories with a large number of files, but you only need to do this once, after which committing, pushing, and pulling changes should not be too painful.
4. If you want to use key-based authentication (as opposed to username/password over HTTPS, for example), you will need to define the logical names git$id_rsa and git$id_rsa_pub to map to the private and public key files, respectively (and of course your public key will need to be registered with the service (GitHub or whatever).
I’m sure you will encounter things that may not work as expected, but rather than me trying to pre-empt every possible scenario, it’s probably better for you to give it a spin and email me if/when you have problems and/or would like additional functionality added.