English 中文(简体)
Should I parse git status or use gitsharp?
原标题:

I d like to integrate git into production pipeline to stage 3dsmax files. While it is alright to work with git through TortoiseGit, I d like to communicate with it from the Maxscript to add custom menu commands to 3dsmax.

Should I parse git status output text to determine folder status or should I use some wrapping tool to correctly communicate with git?

I was thinking about gitsharp since it is easy to call dotNet objects from Maxscript, but I didn t use external dotNet programs.

最佳回答

My own attempt to solve this resulted in parsing git status. Seems cleaner and easier to implement. On the other hand i am looking forword to create an special crafted XML File to get the needed Information in a more "clean" Way.

问题回答

Since git version 1.7.0, there has been a --porcelain option for git status. The output of:

git status --porcelain

... is designed for use by scripts - a compact representation of the output whose format will remain consistent across versions. As the man page says:

Porcelain Format

The porcelain format is similar to the short format, but is guaranteed not to change in a backwards-incompatible way between git versions or based on user configuration. This makes it ideal for parsing by scripts. The description of the short format above also describes the porcelain format, with a few exceptions:

  1. The user’s color.status configuration is not respected; color will always be off.
  2. The user’s status.relativePaths configuration is not respected; paths shown will always be relative to the repository root.

There is also an alternate -z format recommended for machine parsing. In that format, the status field is the same, but some other things change. First, the -> is omitted from rename entries and the field order is reversed (e.g from -> to becomes to from). Second, a NUL (ASCII 0) follows each filename, replacing space as a field separator and the terminating newline (but a space still separates the status field from the first filename). Third, filenames containing special characters are not specially formatted; no quoting or backslash-escaping is performed.

So, as that says, you may also want to consider using:

git status -z

... for an even more robust output format.

git generally contains "porcelain", high level commands designed for everyday user interaction, and "plumbing" which are low level commands which have simple, stable interfaces to build more porcelain. You can find a list in the git man page. To use sergo s example, git ls-files is the plumbing for git status. Wrapping the plumbing is easier and safer than the porcelain, though it may require some puzzling to figure out what set of plumbing maps to what porcelain.

I ve discovered git ls-files and I m totally satisfied with its output format. git status was too human-oriented for parsing.

I would prefer Mercurial to git with its clear status command, but with large binary files it seems that git works better for me.

I don t know nothing about maxscript but if you figure out how to call .net assemblies then you can use gitsharp and I think it would be the best and easiest option!

have a look at the unit tests of the gitsharp API. they show how to get the Status and other high level operations such as committing, switching branches, checking out, viewing changes of a commit and so on.

-- henon

A lot of max is already using .NET assemblies. That should be the easiest thing to develop on. Besides parsing text.... is so fragile. I d just forget about parsing text.





相关问题
git confusion - cloning a repo is returning a past version

Im having some confusion with my git usage. I cloned a repo from one comp to the other, and the new clone is the state of the original that was active some time ago. So its cloning a past version. ...

Appropriate strategy for tagging and hotfixing with git

I was wondering if the strategy I m using for tagging and hotfixing tags (which then I use for deploying rails applications) with git is appropriate. For tagging I just tag a commit of the master ...

Tips on upgrading CVS to git/hg?

We still use CVS, I use git and hg for my personal use though I m still a novice at both, but I realize they re much more modern and better, faster, distributed, etc. It s just everyone is so ...

Using Git in a TFS shop

Using Git at home has spoiled me - I now find using TFS at work to be a bit of a drag and want to explore the possibility of using Git locally and syncing somehow with TFS. I figure there are a few ...

热门标签