{"id":27004436,"url":"https://github.com/tacc/syncmetool","last_synced_at":"2025-08-21T12:44:06.993Z","repository":{"id":234272728,"uuid":"788553649","full_name":"TACC/SyncMeTool","owner":"TACC","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-25T21:04:58.000Z","size":1499,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-06-25T22:20:00.470Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TACC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-18T16:34:49.000Z","updated_at":"2025-06-25T21:05:02.000Z","dependencies_parsed_at":"2024-05-01T14:07:53.648Z","dependency_job_id":"453cbf70-ab11-470f-b4be-9ecdf740b0b3","html_url":"https://github.com/TACC/SyncMeTool","commit_stats":null,"previous_names":["tacc/syncmetool"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/TACC/SyncMeTool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2FSyncMeTool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2FSyncMeTool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2FSyncMeTool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2FSyncMeTool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TACC","download_url":"https://codeload.github.com/TACC/SyncMeTool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2FSyncMeTool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271484281,"owners_count":24767761,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-21T02:00:08.990Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-04T06:16:49.113Z","updated_at":"2025-08-21T12:44:06.819Z","avatar_url":"https://github.com/TACC.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SyncMeTool \nThe SyncMeTool package contains the program ``syncMe``.  The purpose\nis to loop over git repos and sync them with the remote repos. This\nallows you to easily check the status of all repos and pull from the\nremote repos with one command for each rather than manually cd'ing to\neach repo and checking the status or pulling from ``origin``.\nThis command is a combination of a shell script and a lua program.\n\n\n## To install\n\n   1. Install lua, luaposix and luafilesystem on your computer if they\n      are not already there.  On Linux system they can be installed \n      with your package manager.  On a Mac, it a little more complicated. \n      Please install lua and luarocks via brew.  Then use luarocks to install luaposix\n      and luafilesystem:\n\n         % brew install lua\n         \n         % brew install luarocks\n         \n         % luarocks install luaposix\n\n         % luarocks install luafileystem\n       \n   2. Clone this repo.\n   \n   3. Add the repo's bin directory to your path.  For example if you\n      check out this repo into ~/w/SyncMeTool then add\n      ~/w/SyncMeTool/bin to your path.\n      \n## To use\n\nThe first step is to create an env. var called ``SyncDirPath`` that\ncontains a list of directories relative to $HOME that contain git\nrepositories. Supposing you have git repos in ~/c ~/g and several\nrepos in the ~/w directory then add the following to your startup\nfiles (e.g.: ~/.bashrc or ~/.zshrc)\n\n    export SyncDirPath=c:g:w\n   \nThis will cause ``syncMe`` to look at the repos in ~/c, ~/g and say\n~/w/lmod/main, ~/w/lmod/testing, ~/w/xalt/main.  In other words \neach directory listed will be recursively searched until it finds a\nfile or directory name ``git``.  The file name support for ``.git`` is\nto allow git worktrees to be sync'ed.\n\n\nThen to check the status of your git repos you execute:\n\n    % syncMe status\n\nto get status by running ``git status`` in each git repository as\nspecified by ``$SyncDirPath``\n\nTo update or pull from your repos you can do:\n\n    % syncMe update\n\nOr\n\n    % syncMe pull\n   \nThis runs ``git pull`` in each git repository.\n\n\nNote that ``status`` can be abbreviated to ``st``  and ``pull`` or ``update`` can be\nshorten to ``up``.\n\n\n## Typical usage\n\nAt the start of the day, you can run:\n\n    % syncMe status\n    % syncMe pull\n\nto make sure that all local repos are up-to-date. The above can be\nabbreviated to: \n\n    % syncMe all\n    \nwhich will run ``syncMe status`` and if that completes with no commits\nrequired then ``syncMe pull`` is run.\n\n\n\nWhen leaving for the day, you should run:\n\n    % syncMe status\n    \nto make sure that all local repos are up-to-date and that there are no\nuncommitted files.  You'll have to commit any changes or push to\n``origin`` manually. \n\n## Important output reported last\n\nThe syncMe command tries to remove as much unnecessary output from\ngit.  It also saves what it decides it important until the end.  This\nmeans that changes to a repo will appear at the end.  So with\nSyncDirPath=c:g:.up and there is a change in ~/g, the output would\nbe:\n\n    % syncMe pull\n   \n    [pull]: On branch: main,   in directory: c\n    [pull]: On branch: main,   in directory: .up\n\n    [pull]: On branch: main,   in directory: g\n       f709426..18ef6e4  main       -\u003e origin/main\n    Updating f709426..18ef6e4\n    Fast-forward\n     try.bash | 1 +\n     1 file changed, 1 insertion(+)\n\n\nNote that change from \"~/g\" is given last even though it is the second\ndirectory in $SyncDirPath.\n\n## Debugging\n\nSometimes syncMe has trouble connecting to the remote server and the\nimportant output will be hidden away in an internal buffer.  If things\ndo not proceed as expected then you can add the \"-D\" option to see the\ninternal communications:\n\n    % syncMe -D up\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftacc%2Fsyncmetool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftacc%2Fsyncmetool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftacc%2Fsyncmetool/lists"}