5

I consider myself to be a rather prolific open source software developer. I have over 50 original software projects in GitHub with probably close to 100,000 lines of actively maintained code. And that's just the software I've published.

With the sheer amount of code I've written comes some interesting complexities. For instance, I'll be humming along and find a bug in one of my libraries. I'll apply the fix to that library in the current application and usually remember to also apply the fix upstream. What takes forever to deploy is applying the fixed version of the library everywhere else that I use the library.

What I am looking for is a GUI tool that I can register, for example, a file named "http.php". It then tracks all instances of files with that name locally AND preferably also remotely (e.g. SFTP). When a file with the registered filename changes in any of the tracked locations or shows up in a formerly untracked location on designated paths to watch, the tool should visually display the changed file and offer to synchronize it to all or some of other designated locations. Upon completion of synchronization, I also want the tool to run git add/commit/push for git-enabled projects on a per-project basis either directly or by running an external script. I also don't always want to immediately add/commit/push either for some projects and I might want different commit messages depending on the project. I also have old projects with files of the same name that I no longer maintain that I never want to update so there should be some sort of exclusion mechanism on a per-instance basis. I should also be able to 'sleep' a changed file in some location for a period of time (e.g. a few days) in case I'm making significant changes to it so I don't get bothered by the tool.

That's just for tracking one file. The tool should support watching for as many files as I want to watch. Due to the complexities involved, only a GUI app can offer a suitable interface.

Symbolic links will NOT work as I need to be able to commit my code to GitHub but git generally excludes symlinked items. Hard links won't work as I want separate files anyway for various reasons. I want a general-purpose solution, not just for PHP (e.g. Composer doesn't work for me) as I also write C++ from time to time and encounter the same problem there with sufficient regularity. Standard 'sync' tools won't work either as they tend to be automated and my projects generally use a subset of each of my libraries. General-purpose sync tools also don't usually do granular file-level control without a ton of effort. This isn't a file deduplicator either as I actually want duplicate files but I want duplicate files at different times. I can certainly create this myself, but I'd like to see if there's an existing pre-built solution that will suffice before I sink several weeks into developing it.

1 Answer 1

3

Well, it took more than "several weeks" to make this tool. I'm calling it File Tracker - a bulk diff/merge tool for Windows, Mac OSX, and Linux desktop:

https://file-tracker.cubiclesoft.com/

File Tracker does bulk diffs and bulk merges of all files being tracked/synced and can also handle some pretty complex merging scenarios. For example, if I have a Java class file in 5 different Android projects that differ only by a few lines, it can protect those few lines of difference (e.g. the package name on the first line) and merge the rest. (I'm quite familiar with gradle variants. This is different.) The example I give in the tutorial video on the website shows tracking of a base PHP file and a variant of that file.

File Tracker can even work with binary files. When processing diffs, it calculates the percentage difference between any two files.

A couple of requirements from the original question above are NOT supported by File Tracker. The first skipped requirement is running custom commands per project. Projects are probably going to get some changes. The implementation is a good first pass, but they probably need some work. The other requirement was "sleeping" a file. I started to implement that and then realized there were already far better options available via the Synchronize functionality.

To the best of my knowledge, File Tracker is pretty unique. I don't know of another tool that can do an any source to multiple destination diff/merging. There is room for improvement but what I've got right now makes for an okay v1.0 release. This tool has already saved me many months of ongoing efforts and paid down a ton of accumulated technical debt.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.