Giter Site home page Giter Site logo

nosarthur / gita Goto Github PK

View Code? Open in Web Editor NEW
1.6K 15.0 72.0 2.28 MB

Manage many git repos with sanity 从容管理多个git库

License: MIT License

Python 95.99% Makefile 0.63% Shell 3.38%
git command-line-tool productivity git-delegation management cli developer-tools command-line terminal

gita's Introduction

Hi there 👋

  • science and technology
  • coding
  • hobbies
  • productiviy hacks
  • mechanical keyboards
  • coding
  • yoga

gita's People

Contributors

anon-artist avatar bcdiaconu avatar blurayne avatar cd3 avatar dependabot-preview[bot] avatar dgrant avatar dzhou-schrodinger avatar elcorto avatar ewu63 avatar franzs avatar gbloquel avatar gitter-badger avatar jmourelos avatar johnnybeckett avatar jplourenco1 avatar mcebular avatar nosarthur avatar pablocastellano avatar paparoskitos avatar samibh avatar sebastien-rosset avatar sikmir avatar soraxas avatar stevexyh avatar tpout avatar turiok avatar xywei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gita's Issues

Add sub-commands for `gita group`

IMO the command syntax is confusing - you have to pass a list of groups before you get any indication that a name will be requested. I spent 4-5min reading the help text thinking I was missing something, because there was no indication a name would be requested.

At a minimum, update the help text to say "You will be prompted for the group name". However, ideally you woudl support a --name arg before the positional args, so the entire command could be scripted if needed

long directory names produce ugly output

Having a long directory name in the list of repositories produces misaligned output:

> gita ls
project-1         master *_  [COMMIT MESSAGE]
project-2         master     [COMMIT MESSAGE]
reallylong-projectnamemaster     [COMMIT MESSAGE]

Would be good if project-1 and project-2 would have more space dynamically.

error after upgrade to 0.10.2

I upgraded gita from 0.9.7 to 0.10.2 , but now I can only get this response by ANY command.
Anything wrong with config?

Traceback (most recent call last): File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/local/lib/python3.7/site-packages/gita/__main__.py", line 224, in <module> main() # pragma: no cover File "/usr/local/lib/python3.7/site-packages/gita/__main__.py", line 135, in main choices=utils.get_repos(), File "/usr/local/lib/python3.7/site-packages/gita/utils.py", line 34, in get_repos path, name = line.split(',') ValueError: not enough values to unpack (expected 2, got 1)

Python version : Python 3.7.3
OS : macOS 10.14.5

display output in some succinct mode

gita fetch and gita pull could create a lot of screen output, which is not particularly useful (I never looked at them myself). It would be nice to have a succinct output.

@seqizz suggested to use progress bars for the updated repos, like docker pull output. For example,

reponame  branch  ###==== Updating...
reponame2  branch  ######## Failed (There is no tracking information for the current branch.)
reponame3  branch  ######## Done (2 new branches fetched, 1 file changed, 46 insertions(+))
reponame3  branch  ######## Done (Already up-to-date)
reponame4  branch  ######## Done (2 file changed, 12 insertions(+), 4 deletions(-))

I think this is very neat. However, it's not clear to me how to compute the progress. Please leave a comment if you have any ideas.

As for the bookkeeping of which subcommands are in succinct mode, we can introduce another tag in the yaml configuration file, say succinct_output or something that gives a good description of the final implementation. Then users can personalize their preferences, e.g., overriding default behavior, controlling their custom command (is it possible to have a universal solution to compute progress/summaries?).

Subcommand to move to git repo directory

I was using gita for a while, at-times I have move to git repo, if I have too many operation to perform on git repo. so was thinking to have a command by which which I can directly switch from anywhere to git repo.

Current workflow

gita ls <repo>
cd <repo>

Was thinking of having command like

gita cd <repo>

What opinions do you guys have on it.

Output showing escape code instead of being colored in Powershell

When using the ll command, the name of the branch is supposed to have a specific color based on its status.

In Powershell, this is not the case. Instead, it shows the escape sequence of the color, as seen in this screenshot:
image

This was working correctly in version 0.6.5

Better handling of KeyboardInterrupts

When the user wants to cancel e.g. the ll command using Ctrl+C, a stack trace is shown. This should be handled in a more user friendly way, hiding the stack trace away and maybe showing a message that the execution was cancelled.

Suggest explicitly specifying encoding parameter when reading README.md in setup.py

Installation via pip fails for me. The error message implies that the open library function defaults to locale-related encoding scheme, which is gbk on my computer, and fails when encountering the Chinese characters in README.md. Less technologically-inclined people might feel clueless finding cause to the problem. So I suggest we explicitly specifying the encoding scheme utf-8 when reading README.md in setup.py. The change, though small, might improve robustness.

PS: thank you for making such amazing tool!

Is there any homebrew formula for it

I don't see any homebrew formula for gita, do we have any plans to have homebrew formula for it.

I can work on it, thought of confirming before I start on it.

Switch to click?

First: Nice tool! As owner of a framework coming with dozens of modules, i built my own tools (forage) to do stuff on multiple folders already, but gita helps so much more with git repositories, thanks!

Now, i propose switching from argparser to the wonderful click library, because i constantly need to hit up gita's documentation to remember what the symbols and colours on the ll command refer to. I wanted to add this to lls help page, but i don't even know if this is possible with argparse. With click, you just add it to the commands docstring.

If you're open to this, i'd gladly contribute towards the switch.

Possible to add bare repos?

Is it possible to add bare repos to gita?

For example, i have the following:

alias dotgit="git --git-dir=$HOME/somefolder --work-tree=$HOME"

I'm unable to add the folder to gita though with gita add <foldername>

add 'group' sub-command

I usually add many repos to gita and some of them are related. Right now all repos are sorted by name in the gita ll display. It'll look nicer if related repos are next to each other.

The group sub-command has the form of

gita group <repo-names>

It writes a group number into the repo_path file for bookkeeping. And the gita ll will look like

┌ repo1 new-feature arstarsta
│ repo2 new-feature arstarsta
└ repo3 new-feature arstarsta
   repo-x master arstarsta
   repo-xxx fix-bug arstarsta
┌ repo-y master arstarsta
└ repo-z master arstarsta

Well done!

This is the best tool I can found for managing multiple repos!

Workspace - specific repo configs

Hey, first of all thanks for all the good work. You have saved me countless hours managing multi repo projects.

I was thinking of adding a feature to have workspace-specific repo configurations so different workspaces have different list of repos.

Should be pretty straightforward to implement via a recursive check for a ".gita" config file or similar.

More than happy to do a pull request for this what do you think?
Thanks.

Error on `gita ll` after rename implemented

Hi, I pulled master and rebuilt (pip3 install -e <gita source dir>), and I now get a ValueError when running gita ll:

Traceback (most recent call last):
  File "/home/morten/.local/bin/gita", line 11, in <module>
    load_entry_point('gita', 'console_scripts', 'gita')()
  File "/home/morten/workspace/gita/gita/__main__.py", line 128, in main
    choices=utils.get_repos(),
  File "/home/morten/workspace/gita/gita/utils.py", line 52, in get_repos
    path, name = d.split(',')
ValueError: not enough values to unpack (expected 2, got 1)

I ran a quick git bisect and 2684120 (add rename sub-command) seems to be the commit that introduced the error. I haven't investigated any further, just wanted to let you know.

Add context sub-command

This is inspired by the taskwarrior

By using

gita context project1

only repos in project1 will be shown from this point on. For example gita ll only shows repos in project1.

Maybe project1 can be a group for now.

To remove the context

gita context none

relates to #82

add `gita reset` and `gita tag` subcommands

The format is

gita reset <repo name(s)>
gita tag <repo name(s)>

For gita tag, the delegated command is git tag -n (I find it more informative than git tag)

Also update README.md, and change setup.py to bump up version by 0.0.1

Command for mass-clone

Hi,

thank you so much for gita, it's a very nice tool.

The one thing I'm missing is a "clone" command. I'd like to have a list of URLs in the config file of gita, together with the location it should clone them on the filesystem. This would allow me to do a 'gita clone' which then would clone all these repositories (if not already existing).

Use-case: when re-installing a system, a 'gita clone' would be enough to be ready again.

Regards,
Daniel

async calls for `gita ll`

Retrieving status information from individual repos is embarrassingly parallelizable.

Not sure if this would require a lot of changes though. Some commands are run with os.system and some with subprocess. Maybe it's not really worth the trouble ...

Add group support in superman mode

Would it be possible to allow the user to specify a group when using the superman mode? For example to checkout master for all repos under a certain group, or to issue git pull.

expose `allow_all` mode to customization

Currently one can use custom cmds.yml to register commands/aliases that require repo-name(s). But one cannot register them like gita fetch which requires no repo-name(s), and applies the command to all repos.

The scope of this ticket is to expose a tag in the yaml file to allow such customization.

Add 'workspace' or 'team' grouping

I work across multiple teams on the overall product, but each team has its own set of repos. Being able to create a grouping so that gita ll or gita ls would only show the repos in that group/team/workspace would bbe useful.

E.g.

T1_repo1
T1_repo2
T1_repo3
T2_repo1
T2_repo2
T2_repo3
T2_repo4

gita addteam t1
gita addteam t2
gita setteam t1

gita ls

T1_repo1
T1_repo2
T1_repo3

gita setteam t2

gita ls

T2_repo1
T2_repo2
T2_repo3
T2_repo4

support custom yml file

add .gita folder at home directory, put gita_path and commands.yml there.

The custom yml shadows the default one. This way, the user can define custom git shortcuts.

Allow multiple repos with the same directory name

Saw this on HN, looks cool.

I have some repos that have different names upstream, but are cloned into folders of the same name (different parent folders, so I have something like foo/myrepo and bar/myrepo). gita only lets me add one of those repos (seems to remove the previous when I add a new with the same folder name). It's also hard to see which of the two is actually added to gita. How about by default using the upstream repo name as the repo's display name in gita, instead of the name of the folder it's been cloned into?

gita hangs after 'gita pull' when password is needed for multiple repos

When I type 'gita pull', gita pulls the latest changes but then hangs and doesn't go back to the command line. Need to 'Ctrl + C' to escape.

Exception ignored when trying to write to the signal wakeup fd:
OSError: [Errno 9] Bad file descriptor
Traceback (most recent call last):
File "/bin/gita", line 11, in
load_entry_point('gita==0.8.4', 'console_scripts', 'gita')()
File "/lib/python3.6/site-packages/gita/main.py", line 170, in main
args.func(args)
File "/lib/python3.6/site-packages/gita/main.py", line 73, in f_git_cmd
utils.run_async(path, cmds) for path in repos.values())
File "/lib/python3.6/site-packages/gita/utils.py", line 157, in exec_async_tasks
loop.run_until_complete(asyncio.gather(*tasks))
File "/backup/Software/apps_rh/python-3.6/lib/python3.6/asyncio/base_events.py", line 454, in run_until_complete
self.run_forever()
File "/backup/Software/apps_rh/python-3.6/lib/python3.6/asyncio/base_events.py", line 421, in run_forever
self._run_once()
File "/backup/Software/apps_rh/python-3.6/lib/python3.6/asyncio/base_events.py", line 1395, in _run_once
event_list = self._selector.select(timeout)
File "/backup/Software/apps_rh/python-3.6/lib/python3.6/selectors.py", line 445, in select
fd_event_list = self._epoll.poll(timeout, max_ev)
KeyboardInterrupt

add `gita ll`

gita ll will behave like the current gita ls
gita ls will only show the repo names, thus can be used for the bash auto completion script directly

ModuleNotFoundError: No module named 'yaml'

Hello, I installed via pip3 (on a mac) and when I try to run it I get this error

$ gita
Traceback (most recent call last):
  File "/usr/local/bin/gita", line 7, in <module>
    from gita.__main__ import main
  File "/usr/local/lib/python3.7/site-packages/gita/__main__.py", line 2, in <module>
    import yaml
ModuleNotFoundError: No module named 'yaml'

Not able to add git worktree directory as repo

Does gita can manage git worktree directories also?

I am using git worktrees to have different branches checked out into different directories at the same time. And would like to manage git worktree directories also with gita.

Tried, gita add <path-of-work-tree-dir> but seeing the following error:
No new repos found!

refactor the code

  • the group yml file should be group1: [repo1, repo2] instead of group1: repo1 repo2
  • separate configure file loading, so in tests group config file and repo config file can be mocked separately
  • give better names to util.py and common.py, possibly move functions
  • increase test coverage to over 90%
  • internally, repos is a dict of {name: path} and redundant path is manually checked, it makes more sense to do {path: name}
  • use pathlib.Path instead of str
  • repo_path needs to be parsed from , separators, which is a pain when new fields are needed. It may be better to use yaml (or json?)
  • use snake case for class methods
  • profile and speed up

https://clig.dev/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.