git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Cleaning up git user-interface warts

From
Petr Baudis <pasky@suse.cz>
Date
Nov 16, 2006, 05:12 UTC
Message-ID
<20061116051240.GV7201@pasky.or.cz>
In-Reply-To
<7vr6w5y7to.fsf@assigned-by-dhcp.cox.net>
On Tue, Nov 14, 2006 at 11:36:19PM CET, Junio C Hamano wrote:
> Commenting on the messages in this thread:
> 
>  - "resolve / resolved" are both confusing, when you are talking
>    about "mark-resolved" operation.

Well that's what "resolved" is saying. But speaking of which, it took me _weeks_ of regular (though not extensive) usage to train my fingers to write "stg resolved" and not "stg resolve".

>  - "pull/push/fetch" have undesired confusion depending on where
>    people learned the term.  I'd perhaps vote for replacing
>    fetch with download and push with upload.
It's too long. :-(

I think if some people have a real problem with something it's "pull", not push or fetch. Without "pull" name, there's no confusion about merging or not merging; and without it, there's also no confusion about "push" and the fetch/push duality. I'm not saying that this is enough an argument to ditch pull from Git at this point.

Show 12 quoted lines
>  - I think it would be sensible to make remote tracking branches
>    less visible.  For example:
> 
> 	git diff origin
> 
>    where origin is the shorthand for your upstream (e.g. you
>    have .git/remotes/origin that records the URL and the branch
>    you are tracking) should be easier to understand than
> 
>    	git diff remotes/origin/HEAD
> 
>    The latter is an implementation detail.

Hmm, wait. I didn't start using refs/remotes/ yet for obvious reasons, but wasn't it generally agreed when implementing them that what you wrote above would work? (That a ref not found in refs/{heads,tags}/ is looked up in remotes and if it's a directory, /HEAD is appended.) So it doesn't for some reason?

Show 9 quoted lines
>    I could imagine we might even want to allow
> 
> 	git diff origin#next
> 
>    to name the branch of the remote repository.  The notion of
>    "where the tips of remote repository's branches are" is
>    probably be updated by "git download" (in other words, the
>    above "git diff" does not automatically initiate network
>    transfer).
Yes, that little syntax extension would be cute to have.
> Of course, it could even be "cg" ;-).

So, here is an arbitrary list of random reasons why cg commands are not part of git yet:

(i) Naming issues. Example: "pull" vs. "update".

(ii) Namespace issues. Big selling point of Cogito is that it's _simple_. A very important part of that is that your command set is limited, so that even someone who wants to fully grok Cogito is not overwhelmed and has just few commands in front of him. I think we're doing pretty good here, and I very carefully weight adding another command to the set (I'm actually pondering removing some now). The similar applies to actual commands' usage, though certainly not so heavily; and there are few warts here.

But overally, I think this point is pretty much unsolvable and this is where I actually think the main "incompatibleness" of Cogito and Git with its free mix of high- and mid- and low- level commands lies. I don't think the thread provided any solution to this either.

(ii) Behaviour issues. Example: Cogito tries to deal with uncommitted local changes in your repository when doing stuff. It didn't shine at it before recent improvements (post-v0.18), but it tried to preserve your local uncommitted changes during various operations (merging, fast-forwarding, switching branches, seeking, ...). I think historically Git's stance to this was negative (it'd rather block the operation), I'm not sure what the current situation is, though.

(iii) Output format issues. Example: "status" in Git and Cogito has a completely different format in both. I'm a die-hard fan of Cogito's format but there're surely die-hard fans of Git's.

(iv) Control issues. I'm reluctant to give up a final word on how the UI looks like, mostly for the reason of enforcing (ii) and proper documentation. But this is not a blocker point.

(v) Library issues. Cogito has a pretty neat shell library which it prices; but that could be carried around. Also, Cogito requires /bin/bash, but mostly for performance reasons (using builtins instead of forking for external commands at some points); Git has the advantage of simply putting that part in C, which is though something I should've been doing more frequently too.

(vi) Coding issues. This is probably very subjective, but a blocker for me. I have no issues about C here, but about the shell part of Git. Well, how to say it... It's just fundamentally incompatible with me. I *could* do things in/with it, but it's certainly something I wouldn't _enjoy_ doing _at all_, on a deep level. I think the current shell code is really hard to read, the ancient constructs are frequently strange at best, etc. It's surely fine code at functional level and there'll be people who hate _my_ style of coding and my shell code which isn't perfect either, but it's just how it is with me.

Now, it would be absolutely awesome if we could start to bridge at least some of these points, shuffle some functionality around and overally reduce the code duplication, increase features count and improve general level of world happiness.

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
Previous: Petr BaudisNext: Junio C Hamano
Message 228 of 240 in “commit: Steer new users toward "git commit -a" rather than update-index”
  1. commit: Steer new users toward "git commit -a" rather than update-indexCarl Worth, Nov 14, 2006
  2. Andy WhitcroftNov 14, 2006
  3. Cleaning up git user-interface wartsCarl Worth, Nov 14, 2006
  4. Shawn PearceNov 14, 2006
  5. Carl WorthNov 14, 2006
  6. Petr BaudisNov 14, 2006
  7. Carl WorthNov 14, 2006
  8. Junio C HamanoNov 15, 2006
  9. Petr BaudisNov 15, 2006
  10. Junio C HamanoNov 15, 2006
  11. Nicolas PitreNov 15, 2006
  12. Jakub NarebskiNov 15, 2006
  13. Santi BéjarNov 15, 2006
  14. Jakub NarebskiNov 15, 2006
  15. Petr BaudisNov 16, 2006
  16. Nicolas PitreNov 15, 2006
  17. Petr BaudisNov 15, 2006
  18. Jakub NarebskiNov 15, 2006
  19. Karl HasselströmNov 15, 2006
  20. Carl WorthNov 15, 2006
  21. Jakub NarebskiNov 15, 2006
  22. Shawn PearceNov 15, 2006
  23. Carl WorthNov 15, 2006
  24. Steven GrimmNov 17, 2006
  25. Junio C HamanoNov 17, 2006
  26. Petr BaudisNov 17, 2006
  27. Karl HasselströmNov 14, 2006
  28. Nicolas PitreNov 14, 2006
  29. Jakub NarebskiNov 14, 2006
  30. Nicolas PitreNov 14, 2006
  31. Jakub NarebskiNov 14, 2006
  32. Nicolas PitreNov 14, 2006
  33. Carl WorthNov 14, 2006
  34. Jakub NarebskiNov 14, 2006
  35. Nicolas PitreNov 14, 2006
  36. Junio C HamanoNov 14, 2006
  37. Nicolas PitreNov 15, 2006
  38. Junio C HamanoNov 15, 2006
  39. Michael K. EdwardsNov 15, 2006
  40. Nicolas PitreNov 15, 2006
  41. Junio C HamanoNov 15, 2006
  42. Linus TorvaldsNov 15, 2006
  43. Jakub NarebskiNov 15, 2006
  44. Josef WeidendorferNov 15, 2006
  45. Petr BaudisNov 15, 2006
  46. Josef WeidendorferNov 15, 2006
  47. Linus TorvaldsNov 15, 2006
  48. Nicolas PitreNov 15, 2006
  49. Shawn PearceNov 15, 2006
  50. Marko MacekNov 15, 2006
  51. Junio C HamanoNov 15, 2006
  52. Shawn PearceNov 15, 2006
  53. Marko MacekNov 16, 2006
  54. Junio C HamanoNov 16, 2006
  55. Jakub NarebskiNov 17, 2006
  56. SeanNov 15, 2006
  57. Andy ParkinsNov 15, 2006
  58. Linus TorvaldsNov 15, 2006
  59. Michael K. EdwardsNov 15, 2006
  60. Linus TorvaldsNov 15, 2006
  61. Nicolas PitreNov 15, 2006
  62. Linus TorvaldsNov 15, 2006
  63. Carl WorthNov 15, 2006
  64. Junio C HamanoNov 15, 2006
  65. Nicolas PitreNov 15, 2006
  66. Junio C HamanoNov 15, 2006
  67. Nicolas PitreNov 15, 2006
  68. Karl HasselströmNov 17, 2006
  69. Linus TorvaldsNov 15, 2006
  70. Carl WorthNov 15, 2006
  71. Shawn PearceNov 15, 2006
  72. Linus TorvaldsNov 15, 2006
  73. Nicolas PitreNov 16, 2006
  74. Linus TorvaldsNov 16, 2006
  75. Nicolas PitreNov 16, 2006
  76. Michael K. EdwardsNov 16, 2006
  77. Andreas EricssonNov 16, 2006
  78. Carl WorthNov 16, 2006
  79. Michael K. EdwardsNov 16, 2006
  80. Carl WorthNov 16, 2006
  81. Junio C HamanoNov 17, 2006
  82. Carl WorthNov 17, 2006
  83. Johannes SchindelinNov 17, 2006
  84. Junio C HamanoNov 17, 2006
  85. Shawn PearceNov 17, 2006
  86. Junio C HamanoNov 17, 2006
  87. SeanNov 15, 2006
  88. Jerome LovyNov 21, 2006
  89. Theodore TsoNov 16, 2006
  90. Andreas EricssonNov 16, 2006
  91. Linus TorvaldsNov 16, 2006
  92. Carl WorthNov 16, 2006
  93. Linus TorvaldsNov 16, 2006
  94. SeanNov 16, 2006
  95. Anand KumriaNov 16, 2006
  96. Junio C HamanoNov 15, 2006
  97. Theodore TsoNov 16, 2006
  98. Junio C HamanoNov 16, 2006
  99. Alexandre JulliardNov 16, 2006
  100. Petr BaudisNov 16, 2006
  101. Alexandre JulliardNov 16, 2006
  102. Jakub NarebskiNov 17, 2006
  103. Alexandre JulliardNov 17, 2006
  104. Jakub NarebskiNov 17, 2006
  105. Han-Wen NienhuysNov 16, 2006
  106. Jakub NarebskiNov 16, 2006
  107. Junio C HamanoNov 16, 2006
  108. Han-Wen NienhuysNov 16, 2006
  109. Junio C HamanoNov 16, 2006
  110. Junio C HamanoNov 16, 2006
  111. Junio C HamanoNov 16, 2006
  112. Linus TorvaldsNov 16, 2006
  113. Junio C HamanoNov 16, 2006
  114. Han-Wen NienhuysNov 16, 2006
  115. Junio C HamanoNov 16, 2006
  116. Han-Wen NienhuysNov 16, 2006
  117. Han-Wen NienhuysNov 16, 2006
  118. Jakub NarebskiNov 17, 2006
  119. Han-Wen NienhuysNov 24, 2006
  120. Jakub NarebskiNov 24, 2006
  121. Johannes SchindelinDec 5, 2006
  122. Junio C HamanoDec 5, 2006
  123. pretty-formats: add 'format:<string>'Johannes Schindelin, Feb 23, 2007
  124. Han-Wen NienhuysFeb 23, 2007
  125. Johannes SchindelinFeb 23, 2007
  126. Robin RosenbergFeb 23, 2007
  127. Johannes SchindelinFeb 24, 2007
  128. Junio C HamanoFeb 23, 2007
  129. Johannes SchindelinFeb 23, 2007
  130. Junio C HamanoFeb 23, 2007
  131. Johannes SchindelinFeb 23, 2007
  132. Linus TorvaldsNov 16, 2006
  133. Han-Wen NienhuysNov 16, 2006
  134. Linus TorvaldsNov 16, 2006
  135. multi-project repos (was Re: Cleaning up git user-interface warts)Han-Wen Nienhuys, Nov 16, 2006
  136. Linus TorvaldsNov 16, 2006
  137. Junio C HamanoNov 16, 2006
  138. Linus TorvaldsNov 16, 2006
  139. Shawn PearceNov 17, 2006
  140. Linus TorvaldsNov 17, 2006
  141. Carl WorthNov 17, 2006
  142. Shawn PearceNov 17, 2006
  143. Carl WorthNov 17, 2006
  144. Shawn PearceNov 17, 2006
  145. Marko MacekNov 17, 2006
  146. Junio C HamanoNov 17, 2006
  147. Junio C HamanoNov 17, 2006
  148. Shawn PearceNov 18, 2006
  149. Junio C HamanoNov 18, 2006
  150. Shawn PearceNov 18, 2006
  151. Johannes SchindelinNov 16, 2006
  152. Junio C HamanoNov 16, 2006
  153. Johannes SchindelinNov 17, 2006
  154. Linus TorvaldsNov 16, 2006
  155. Linus TorvaldsNov 16, 2006
  156. Johannes SchindelinNov 16, 2006
  157. Linus TorvaldsNov 17, 2006
  158. Carl WorthNov 17, 2006
  159. Johannes SchindelinNov 17, 2006
  160. Petr BaudisNov 17, 2006
  161. Johannes SchindelinNov 17, 2006
  162. Han-Wen NienhuysNov 16, 2006
  163. Han-Wen NienhuysNov 16, 2006
  164. Jakub NarebskiNov 17, 2006
  165. Linus TorvaldsNov 16, 2006
  166. Junio C HamanoNov 16, 2006
  167. Linus TorvaldsNov 16, 2006
  168. Junio C HamanoNov 16, 2006
  169. Linus TorvaldsNov 16, 2006
  170. Carl WorthNov 16, 2006
  171. Johannes SchindelinNov 16, 2006
  172. Linus TorvaldsNov 16, 2006
  173. Han-Wen NienhuysNov 17, 2006
  174. Junio C HamanoNov 17, 2006
  175. Han-Wen NienhuysNov 17, 2006
  176. Petr BaudisNov 17, 2006
  177. Carl WorthNov 17, 2006
  178. Carl WorthNov 17, 2006
  179. Linus TorvaldsNov 17, 2006
  180. Han-Wen NienhuysNov 17, 2006
  181. Michael K. EdwardsNov 17, 2006
  182. Michael K. EdwardsNov 17, 2006
  183. Junio C HamanoNov 17, 2006
  184. Michael K. EdwardsNov 18, 2006
  185. Jakub NarebskiNov 17, 2006
  186. Petr BaudisNov 16, 2006
  187. Petr BaudisNov 15, 2006
  188. Nicolas PitreNov 15, 2006
  189. Linus TorvaldsNov 15, 2006
  190. Nicolas PitreNov 15, 2006
  191. Anand KumriaNov 16, 2006
  192. Junio C HamanoNov 14, 2006
  193. Junio C HamanoNov 14, 2006
  194. Nicolas PitreNov 15, 2006
  195. Junio C HamanoNov 15, 2006
  196. Shawn PearceNov 15, 2006
  197. Junio C HamanoNov 15, 2006
  198. Johannes SchindelinNov 15, 2006
  199. SeanNov 15, 2006
  200. Nicolas PitreNov 15, 2006
  201. Junio C HamanoNov 15, 2006
  202. Andy ParkinsNov 15, 2006
  203. Junio C HamanoNov 15, 2006
  204. Nicolas PitreNov 15, 2006
  205. Carl WorthNov 15, 2006
  206. Junio C HamanoNov 15, 2006
  207. Carl WorthNov 15, 2006
  208. Petr BaudisNov 16, 2006
  209. Robin RosenbergNov 16, 2006
  210. Petr BaudisNov 16, 2006
  211. Han-Wen NienhuysNov 16, 2006
  212. Andy ParkinsNov 15, 2006
  213. Jakub NarebskiNov 15, 2006
  214. Andy ParkinsNov 15, 2006
  215. Karl HasselströmNov 15, 2006
  216. Andy ParkinsNov 15, 2006
  217. Nicolas PitreNov 15, 2006
  218. Junio C HamanoNov 15, 2006
  219. Nicolas PitreNov 15, 2006
  220. Karl HasselströmNov 16, 2006
  221. Alan ChandlerNov 18, 2006
  222. Junio C HamanoNov 15, 2006
  223. Andy ParkinsNov 15, 2006
  224. Petr BaudisNov 16, 2006
  225. Andreas EricssonNov 15, 2006
  226. Jakub NarebskiNov 15, 2006
  227. Petr BaudisNov 16, 2006
  228. Petr BaudisNov 16, 2006
  229. Junio C HamanoNov 16, 2006
  230. Petr BaudisNov 16, 2006
  231. Junio C HamanoNov 16, 2006
  232. Petr BaudisNov 16, 2006
  233. Junio C HamanoNov 17, 2006
  234. Han-Wen NienhuysNov 17, 2006
  235. Alan ChandlerNov 18, 2006
  236. Junio C HamanoNov 14, 2006
  237. Shawn PearceNov 15, 2006
  238. Richard CURNOWNov 16, 2006
  239. Johannes SchindelinNov 16, 2006
  240. Petr BaudisNov 16, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.