Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

It will be easier if I explain what I would use it for than explaining what it does.

I am part of a student television and we have several editing pcs. At the moment the structure we have with all the files isn't great and I'm trying to organise it a bit better. We now have a NAS server.

What I want to do is have all the projects and content files stored in separate folders on the nas server. Then when someone wants to work on something the project folder should be created first if it is a new project, and then all of the files for that project should be copied to the local pc that's being used. Then when the user has finished with the project they should move the files back to the nas server. This way the only things that are ever stored on the pcs are files that are actively being worked on. Storing everything on the NAS should make it a bit easier to manage backups as well.

So I want to automate the process so a user can 'Check Out' a project which will then copy all the files to the pc. Then they should be able to 'Check In' the project when they've finished and it would replace all the files on the nas with the new ones. I think it's similar to a revision control system like Git with push and pull but I don't want to keep revisions and it's not for managing source code.

Has anyone heard of any software that might do this? If not I guess I'll have to code it myself in which case does anyone have any suggestions before I start?


share|improve this question

closed as not constructive by random May 15 '13 at 20:12

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

Version control systems work well for small files, especially text based ones and binary files. You talk about editing PC's and student TV. How big are the files? I think the source control solutions offered below will not work well for large files. – Matt H May 14 '13 at 21:50

You mentioned Git. That is exactly what you are looking for. Git and SVN are designed for source code for programmers, but there is nothing that restricts it to that. At my work our SVN server holds documentation, programs, pictures, etc.

At it's core, version control just syncs folders and provides a history of who did what. It really has nothing to do with code.

These articles show you how you can install SVN on your NAS:

Then you can install this program on all the computers that need to use it:

share|improve this answer
Thanks. I will take a look in more detail later. Isn't keeping revisions baked into it though? I only want to keep the latest versions on the nas, or actually it might be good to keep versions but I would need to be able to easily remove old versions. Say all the video files got re-encoded I would want to make sure they don't all get saved again on the nas because it would be taking up disc space. – Tom Jenkinson May 14 '13 at 15:14
@TomJenkinson Most versioning systems only keep the most updated revision in the repository and then you have a folder called "tags" where you can put version 1, 1.3, 2.0, etc. to keep as a snapshot in time permanently and then continue on with the project knowing you have a secure backup. The only thing kept from the older versions that are not tagged are comments left by people when they check in a new version so that you can see what was done and who did what. – Chrono May 14 '13 at 15:25
Does this mean that at least one version will always be kept? Eg if a file was created, everything was pushed, then the file was deleted and everything was pushed again would that file be removed from the nas? – Tom Jenkinson May 14 '13 at 16:03
@TomJenkinson No, if you delete a folder on your computer and then commit the change to the server it will be gone from the NAS and your local PC. However when you make a tag, they are not intended to be deleted and require a secondary confirmation before deleting. Plus when you are setting up the NAS, you get to make the rules and you can make it to where no one can delete a folder or tags so that they will be safe from accidents. Naturally though accidents are defended against because it takes a pretty deliberate commit operation for a change to be completed. – Chrono May 14 '13 at 16:08
@TomJenkinson Also, if someone commits a delete to the server all the other users that also have that file checked out won't have their files affected until they update their version to the one that someone else did and everyone will be informed that something has been deleted. – Chrono May 14 '13 at 16:11

BitTorrent Sync might scratch your itch. It's a program which can be used to sync folders across a network, a lot like Dropbox.

You could use it like this :

  • Download and install BitTorrent Sync on your NAS.
  • Create a sync folder for each project
  • Take note of the "secret" for each sync folder. This is what will allow you to link your workstations to the NAS.
  • Install BitTorrent Sync on each workstation.

With this setup, each time one of your users wants to work on a project, they can open the BTSync GUI and add a sync folder using the secret which corresponds to the wanted project. The files will be transferred from the NAS immediately and the user can work on them on the worsktation. As an added bonus, any changes and updates to your project will automatically be synchnonised with the NAS, in effect acting like a real-time backup. Once they are done working on the project, they can remove the sync folder and delete everything on the workstation.

Be aware that BitTorrent Sync is still in the development stages, so it might be prone to bugs. Nevetheless, a lot of people like me are using it without any problems.

share|improve this answer
Thanks. I first heard of BitTorrent sync last week. It sounds quite good but I don't think it has an api yet so I wouldn't be able to customise it very easily. At the moment I'm thinking an svn is probably the right way to go about it. – Tom Jenkinson May 14 '13 at 15:59
If you're looking at something which can be customised, perhaps Unison might be better. You could create a front-end for it using something like Zenity to launch synchronisation on-demand, instead of being always-on like BTSync, plus it's free software. If you don't want to keep old versions of your project files around, then a version-control system like SVN really isn't the right solution. – jcharaoui May 14 '13 at 16:06
Unison sounds quite good and possibly better than an svn. I'll let you know what I go with. Thanks! – Tom Jenkinson May 14 '13 at 16:41

You want to look at rsync. It's a tool which can synchronize folders between two systems:

rsync <source> <destination>

So to "check out a folder"

rsync -az user@nas:/path/to/shared/folder /path/to/local/folder

And then to check it back in after you're done making changes:

rsync -az /path/to/local/folder user@nas:/path/to/shared/folder

Now, this will totally clobber changes if two people try to work on the same folder; If A checks out a folder, and then B checks out the same folder, and then A checks in the folder and then B checks in the folder, all of A's changes will be completely erased by B because B doesn't have A's changes. A proper distributed version control system (like git or mercurial) can solve this, but if you don't need revisions and don't have to worry about multiple people trying to check out the same folder and work on it, then rsync will probably much simpler and much more efficient at transferring large files.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged .