Git or Gist workflow for Pythonista
thomasw last edited by
Does anyone have a recommended Git or Gist workflow for Pythonista? I'm aware of the "send to gist" feature, but that doesn't support revisions.
ccc last edited by
There are several interesting tools...
- https://github.com/Pythonista-Tools/Pythonista-Tools/blob/master/GitHub Tools.md
...but I have never seen a blog post where someone documents the best practices for
how to use any of these tools to do a full GitHub lifecycle.
A walk-through of the following steps would be a huge help to me:
- Use Working Copy clone an existing repo from GitHub
- Move one (or all) of the Python files from that local copy into Pythonista
- Make a change in one of those Python files
- Move the modified file from Pythonista back into Working Copy
- Push the change into the GitHub repo
5a. A repo to which I have commit rights 5b. As a "pull request" to a repo to which I do NOT have commit rights
Steps 2, 4, and 5b are the ones that I have difficulty with and I am sure that my current approach is suboptimal ;-).
I have not used working copy, but my impression of the interface to pythonista was that it did not handle branching/merging/etc.
Currently the best option for bi-direction git is the git command in stash. This does (as of march) include an improved set of tools like reset, branch, fetch, and merge, which allow more flexibility, though this is probably not well documented. I probably need to write a more comprehensive tutotial.
I am in the process of a complete overhaul of gitview though it is not ready for prime time.
gistcheck was once a viable system for managing gists of single files. I updated it for ios8 a while back, but honestly I don't use it so not sure if it works in the beta. Also, I seem to recall bookmarklets were crippled in some version of ios, which broke one of the main features of this approach.
Wow, working copy looks great, I want to look at that more. Didn't know about that. Searching the app store for "github" a few years ago, I came up with some pretty crappy apps. I was thinking of writing an automatic github sync with pythonista, which would be ideal because of the functionality with going back to previous versions. That'd be a great backup.
It's a shame about apple's downloading code rule. It's not hard to copy/paste code from the same website you'd be downloading it from if you're willing to put in extra effort. I also don't know how they define 'code'. Workflows could certainly be considered executable code, and yet the gallery allows users to download code snippets. Maybe this isn't concerning to Apple because of the clear limitations of the app, but if they're going to ban the downloading of executable code, they should ban it, not make exceptions for some apps.
I also think it'd make more sense for the rule to be modified to permit apps that only upload/download code written to the user, maybe even to a private server for that app. It'd be great to permit code syncs, just not downloading random code.
It'd be a LOT better to let @omz write built in sync options.
thomasw last edited by
@JonB I just tried gistcheck and it appears not to work, perhaps because of the beta.
@ccc, I can not believe your comments here. I keep th9nking someone has some magic sauce I don't have. It's so frustrating because I know often is not all said here to make sure something stupid does not happen with you know who.
Ccc you have asked me many times to share a project as a repo vrs a gist. Easy enough done, but it's the lifecycle where it all comes apart. I would love to close off my project now and share as a repo for collaboration, but how to update from Pythonista (I mean a button press, not copy and pasting all my files), then also downloading the latest branches or whatever you call them to Pythonista, then also to be able to go back to any branch in the project and restore that to Pythonista. To me this seems like it just should be all reasonable. But the rules or whatever seem to not publicly allow that.
Ccc, I am not having a go at you. I am just venting my frustration. Somehow we are missing out on one of the most important things about python, collaboration! Drives me crazy
@jonb , maybe stash is the way to go. I am sure I have tried with stash. Not saying it does not work, it I don't think it's for dummies like me.
Jonb is it possible to run UI with stash? Just a thought to help simplify the cmd line interface. Eg, can you make a stash object, and call the cmd line from the object. For a powerful cmd line editor like stash, to have it operate as an object or faceless app, whatever the right word is could offer a lot of possibilities to simply chained cmd line directives. Look maybe I don't know what I am talking about. But I just know I wish I could do it easy and in predictable and reliable way, with the knowledge I will not lose data. Eg, stash could have an option to enter a Dropbox account or directory or another other account that it makes a back up or your working copy of files before any merge, pull request etc... Is done before any of the git cmds are executed.
@Webmaster4o , yeah. But not only a pain, it's not controlled. Also if you are out and want to to a pull or push or take from a branch or whatever crazy thing you can do with Github, it's all about copy and pasting. Well as least as far as I know. But really copy and pasting into Github repo's must negate the whole concept of managed source code.
Again, I am not blaming anyone. I am just venting because I really find it frustrating. I would love a practical way here to collaborate with all the guys here on code, but one copy paste mistake, goes to hell. Also, maybe I want to update one line in a function, could be important. Then want to push it to the repo with a comment, should be a no brainer. Then if in 5mins later someone further refines my update, I should be just be able to update my local copy with a click.
Yeah, I go on and on. I would love to see this solved correctly. I know the people here have the skill to do it, but it's walking the fine line I guess
Another way is to make a Kickstarter project to buy Apple 😁
Right. I'm a little upset about the $10 IAP for working copy push functionality, I'd be happy to pay maybe up to 5, but 10 is excessive.
i am not sure what a ui shell would look like :) Windows perhaps.
gitview was supposed to be the ui version of a git client. It works, if you are careful in your workflow. Because there is no merge, it is necessary before changing files locally, to pull, then change/commit locally, then push. Don't ever commit directly in github, such as updating readme, without then pulling back to your device. The ui is also probably fairly nonintuitive. I use this in combo with stash -- stash is used for anything complex, gitview is used for selecting which files to commit, and actually committing, and also the diff viewer is slightly more convienent.
I aim to improve the lack of fetch/merge with the next version of gitview, along with a vastly improved ui - a cleaner button bar menu, sliding subframes for branch or remote management, and integrated help).
@JonB , sorry I didn't explain the UI part correctly. But imagine you could create an object, mystash = stash.FacelessApp() from inside Pytonista. So you might have a mystash.exec() method, and the results being returned rather than going to std.io or console or whatever. That would enable others to write a UI using Pythonista around the cmd line interface of stash. I know I have given a very simplified English version here. In theory I have no idea how hard it would be to turn stash into a callable object , but it sounds interesting to me.
But look for me, I have have limited exp. with cmd line interfaces, especially in recent years. I am sure those who are comfortable with them are thinking what the hell is he going on about. But when you are not used to using cmd line , it sucks the life out of you. But that's just me.
But from what I see here, the least understood subjects are about backing up code, and gusts and repo's.
If I am not mistaken, people are scared to make something too powerful or comprehensive because of the possible ramifications.
Let's say it was not so political or sensitive, why would someone not just publish a simple guide to the life cycle as a keynote presentation for example.
Again, I am not blaming anyone. And maybe if I go back to stash I will understand it better now. But really, this would make my year, if I could easily work with a repo in a collaboration way with guys here.
Tizzy last edited by
just chiming in with my particular source control workflow if anybody's curious I think it might be pretty unique.
1.) Dropbox sync for all scripts within Pythonista. I have the sync script linked to a launch center action so I can quickly run it from my home screen before/after any editing has taken place anywhere. (have to be meticulous and careful here)
2.) Individual project in it's own subfolder within dropbox folder, symlinked to from an xCode project on my Mac.
3.) xCode's source control from within xCode
@Tizzy , thanks for the info. Had some Dropbox syncing working before. After going to 1.6, I didn't reinstate it. I also didn't do a good job of automating it. I think I could do a better job now. At least I hope so.
I haven't tried an Xcode project yet. Scares the crap out of me. Will have to try it sometime.
If I am working on something and want a snapshot because I am about to refactor the code (which I have to do all the time, because I am hopeless 😱) I just use the 'share as gist'
I accept that there are ways to do,all this. But it's just not as simple as it should be. And as you point out, sometimes you have to be very diligent and careful.
I don't understand all the potential problems with storing scripts and or full projects in SQLite databases. It does not solve any problems relating to repo's etc. It could still be a interesting way to back up named/dated versions to a single file, so you only need to back up your sqlite db file. If I ever finish my resource manager, I will give it a go.
But again thanks for your comments, spurred some new thoughts for me
@JonB , oh sorry one more thing I neglected to be clear about. I didn't mean that the whole of stash to been turned into a GUI. Just saying if it was also a callable object that certain cmds could be wrapped up in a UI being powered by stash. I know it's a powerful tool. I would have thought even my powerful if could be called from inside a app.
Anyway, I hope I haven't been offensive, was not my meaning. I am just frustrated about not being able to do it easily and properly (repo's that is). I also accept, that my lack of skill is also a big contributor to that.
stash actually does include a callable object where other python scripts can run commands. So it is possible to write programs that include ui components, although there is sort of a console paradigm that tool authors have tried to honor.
In re-installing stash, I have found that it does not seem to properly install gittle anymore in the beta, I suspect because of the changes to the sys.path. So, that needs to be fixed before git is really viable in stash.
@JonB , ok. When it's resolved I will try again. This time I will give it my all. I really want to get it working in a way I understand it.
ywangd last edited by
Just read this thread. @Phuket2 stash object is callable since v0.3. So you can do something like
from stash import stash; _stash = stash.StaSh(); _stash('Your_Command'). If a script is invoked from within stash, it can access the callable object without import, i.e. just do
@ywangd , thanks. I was just trying it inside a script. Is it possible for the _stash(cmd) to do its normal output to the Pythonista console also?
ywangd last edited by
@Phuket2 Yes you can send output to the builtin console with
_stash('some_command > &3'). The
>character is a redirect operator in shell and
&3is the pointer to builtin console. Please note you need v0.6 for this to work. If you are on earlier version, please run
selfupdatefirst and restart Pythonista.