-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTODO
225 lines (164 loc) · 7.42 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
What comes on my mind but it isn't able to hold it all. Unsorted.
Cogito-only stuff:
Pre-1.0 stuff:
* Tutorial
(We have crash courses, one for version control newbies is missing -
it should be included in the source as well, though.)
* Show only first 12 (or so) nibbles of the hashes everywhere
Even this might be too much, but more than this is really useless
for anyone remotely human. And it's less scary, too.
* "Volatile" branches
* Make one-time merges easier by enabling cg-update to take
URIs directly, not only head names.
* Support for mass-cloning all remote refs at once
* Requires first multi-origin support (if origin is a dir, fall
back to origin/master).
* Interface: cg-clone -a
* Implement this using refs/remote/ so that the branches won't
get mixed together and we can trace new/disappearing branches
in the parent repository sanely
* Support for remotes/
More powerful 'n stuff than branches/, ya know.
LIKELY NOT - parsing those would be just annoying, we will probably
just dump directly to supporting [remote] in .git/config. There will
need to be a conversion script though.
* Push new tags automagically
(With the same logic as when fetching - push tags which reference
objects that are already pushed.)
(First there really needs to be a way to have private tags. I think
just tag names starting by a dot would do.)
* Better merging
* Handle all possible conflicts
* Make sure the user resolved the conflicts
(if possible without requiring him to manually indicate that)
* Support for various GIT's "merge strategies"
* Somehow show the list of commits getting merged
-- post 1.0 --
* Vim-merging
* cg-resolve: resolving swiss-army knife, see msgid:
<20060924171246.GY13132@pasky.or.cz>
* cg-mkpatch overhaul
cg-mkpatch was overlooked for too long, while it could do a huge
number of cool things (after some cleanups, and probably factoring
out the common parts of cg-mkpatch, cg-log and cg-diff):
Frontending git-request-fetch, interfacing with email directly...
* cg-commit enhancements
* Force the user to confirm his credentials for the first time
* Possibly verify the patch being committed against
whitespace errors and stuff; hooks are good for this too,
but I think it's good to have internal support for the
basic stuff. (Get inspired in git-commit.)
* Call git-fmt-merge-msg when committing a merge
* cg-shelf - shelve changes temporarily
This saves your current uncommitted changes, removes them from the
tree, opens editor with the diff of those changes and lets you edit
it; then it applies only the diff on the tree and lets you commit
it or whatever. After committing, cg-unshelf or cg-shelf -u or
whatever will restore the state of the tree before cg-shelf was
called.
* Support all the Git hooks
Post 1.0:
* Subprojects
Support a GIT project inside a GIT project:
x/.git
x/foo/bar/.git
x/foo/bar/baz/.git
x/quux/zot/.git
That means cg-update working recursively and cg-add'n'stuff
checking if there isn't another .git along the path of its
argument.
Needs more thought, especially wrt. fetching and merging
recursive semantics.
* Comfortable cg-log
Probably make it a real terminal application, not just less
backend.
* Somehow switch between summary and full output
* Possibility to quickly show patches for commits
* Graphical commit/merge tool
* cg-annotate, cg-bisect
* Cogito's friendly patch stack handling (frontending stgit?)
Not sure yet if the UI improvement would be substantial
* More comfortable history rewriting
* Make it possible to do rebase-merge easily, rebasing local
changes against new remote head; OTOH, perhaps we just need
to advertise StGIT more...
* Easier recommitting - if I need to uncommit or change some
commit not at the top, let me more easily uncommit, change it
and recommit the rest on the top.
This is encouraging history rewriting which is bad as soon
as you publish your changes, but not before; I believe it's
good to offer people ways to keep their history tidy if you
also educate them not to do it after they publish it.
* Revisions numbering
An alternative way to identify revisions - by their sequential
number from the root, after merge-sorted.
Needs more thought.
* Rewrite in some other language
csh? Postscript? Befunge?
* Make Cogito agnostic to the underlying layer
Actually, I start to miss Cogito's convenient interface a lot when
working with other systems, and my fingers are already trained for
the cg-commands. But this is a very long-term goal and will take
a good deal of thought and work.
* World domination
Make sure that as many projects as possible use GIT, and in
particular that everyone uses Cogito! ;-)
Stuff partially or fully involving Core GIT:
Short term:
* Unnamed remote branches
Pull from an URI without cg-branch-add'ing it first.
See Pasky's mail.
* Private tags support
* Empty directories handling
Directories should be first-class index objects, not implicit.
Perhaps.
* Common templates
The discussion about templates sharing among the toolkits somewhat
died out.
Long term:
* Proper renaming recording
We need to do something about it. For now, at least properly follow
renames everywhere and have tree renames detection.
In the long term, either some Linus-envisioned smart moves detection
needs to be done (I'm still skeptical) or persistent file ids. One
trouble is keeping merge from traversing all the history.
* Better than three-way merging
Perhaps pcdv merge, let's see how will that turn out.
Three-way merge silently gets some cases wrong, and an army of
experimental VCSes developers is devising better merge algorithms
for us. ;-)
(pcdv merge is actually probably very similar to how the BK merge
works.)
* Cherrypicking support
At least "partial" cherrypicking support, with changing head IDs.
Merge up to the first dropped revision, rebase and merge on...
Needs more thought.
* Revision journal
I envision each head having a revision journal - list of all preceding
revisions in their merge order.
There are two motivations. The first is possibility of fast and
setupless dumb server transport. But more importantly, git-rev-list
does not scale if you want to sort it by anything but date, and you
definitively want - I think the date order is confusing and e.g.
for cg-mkpatch simply wrong and you really need merge order instead.
But that requires to load all the history, then order it, and that
means that it takes to crunch through the whole history even when
showing the tip of cg-log. And that is not going to scale to
thousands of revisions - it already takes 2s (20s for cold cache!)
for the current Cogito/git repositories, which is too long for
a quick cg-log peek.
So instead, every time you commit, the new revision is appended
to the revision journal of the given head, and when you fetch the
head, you bring the remote revision journal along. When you merge,
all the new revisions are appended between the previous head and
the merge head - that gives you the merge order.
Well, if you want to append to it, you want new revisions at the end.
If you want to fetch it, you want the new revisions at the start.
So I think the journal should look like
.git/revlist/master/0001
.git/revlist/master/0002
...
where each file contains some 1024 revisions or so, with the new
ones at the end.
Needs more thought. See also
Jun 16 Jon Seymour [PATCH 1/1] [PROPOSAL] Add a module (repo-log.c) to log repository events.