Re: git clone --depth: shallow clone problems

2015-05-29 Thread Duy Nguyen
On Tue, May 26, 2015 at 9:54 PM, Junio C Hamano gits...@pobox.com wrote:
 Duy Nguyen pclo...@gmail.com writes:

  --unshallow::
 - If the source repository is complete, convert a shallow
 - repository to a complete one, removing all the limitations
 + If the source repository is complete, convert all shallow
 + refs to complete ones, removing all the limitations

 Define shallow ref, or better yet explain without introducing such
 a new term (I do not think shallow-ness is a property of a ref, by
 the way---I think you meant all refs that can reach the points the
 history is cauterised by .git/shallow, but we shouldn't assume that
 the target audience of this paragraph to know Git as well as I do).

OK maybe

Make sure all existing refs have the same history as the ones from the
source repository. If the source repository is complete, this removes
all limitations imposed by shallow repositories.

?

   imposed by shallow repositories.
  +
  If the source repository is shallow, fetch as much as possible so that
 -the current repository has the same history as the source repository.
 +the all existing refs of current repository have the same history as in
 +the source repository.

 Makes sense, modulo so that the all existing refs sounds strange
 to my ears (all the existing refs perhaps).

Will fix. Although I think the new paragraph above already covers this case too.

 ++
 +Note that if the repository is created with --single-branch, which is
 +default for a shallow clone, only one ref is completed. `--unshallow`
 +does not fetch all remaining refs from source repository.

 I do not think this Note is being as helpful as it could be.

  - If the repository was created with --single-branch but if the
user later fetched and started tracking other branches, the
statement only one ref is completed is untrue; the true version
is only the existing refs are completed, which leads to a more
important point.  It says the same thing as all existing refs
above and does not add any useful information.

  - The last sentence is less than useful but merely frustrating---it
says what you cannot do with this option, strongly hints that the
writer of the sentence knows what the reader wants to achieve,
but without saying what other way the reader go to achieve it.

 Perhaps replace that Note paragraph with something along this line?

 +
 By fetching and tracking refs that you haven't been tracking,
 you can add these new refs to all refs to be unshallowed.

It was meant to emphasize --unshallow would not create a true clone,
if people miss the keywords all existing refs.. Maybe..

You may need to fetch and track other refs from the source repository
if you want to make full clone.

?


 2) git fetch --unshallow should convert the clone into an actual
 equivalent of a normal, not shallow clone.

 I was thinking of some way to undo --single-branch too. I don't think
 it should be the job of --unshallow, maybe a new option, but I can't
 think of a name better than --really-unshallow :P

 Isn't that just the matter of updating remote.origin.fetch?  I do
 not think it belongs to clone (or fetch).  Perhaps it belongs to
 remote, where it already shows with git remote -v what is
 fetched and pushed.

Yeah, perhaps showing an advice about git-remote is enough if the
current ref spec does not fetch everything.

  --depth depth::
   Create a 'shallow' clone with a history truncated to the
 - specified number of revisions.
 + specified number of revisions. --single-branch is
 + automatically specified unless the user overrides it with
 + --no-single-branch

 Yeah, something like that would be a definite improvement.

 By the way, while composing this message, I scratched my head after
 typing

 $ git clone --shallow=4 --no-local ./git.git ./playpen

 Is it just me or do we want to add such a synonym?

I have a series to define shallow boundaries by tags or dates, in
addition to history depth. It may take a few more months until I'm
finished with my ongoing topics. Then you could think about what
--shallow means exactly ;-)
-- 
Duy
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: git clone --depth: shallow clone problems

2015-05-29 Thread Junio C Hamano
Duy Nguyen pclo...@gmail.com writes:

 On Tue, May 26, 2015 at 9:54 PM, Junio C Hamano gits...@pobox.com wrote:
 Duy Nguyen pclo...@gmail.com writes:

  --unshallow::
 - If the source repository is complete, convert a shallow
 - repository to a complete one, removing all the limitations
 + If the source repository is complete, convert all shallow
 + refs to complete ones, removing all the limitations

 Define shallow ref, or better yet explain without introducing such
 a new term (I do not think shallow-ness is a property of a ref, by
 the way---I think you meant all refs that can reach the points the
 history is cauterised by .git/shallow, but we shouldn't assume that
 the target audience of this paragraph to know Git as well as I do).

 OK maybe

 Make sure all existing refs have the same history as the ones from the
 source repository. If the source repository is complete, this removes
 all limitations imposed by shallow repositories.

OK, I can understand that description a lot easier than the original
one.

 ++
 +Note that if the repository is created with --single-branch, which is
 +default for a shallow clone, only one ref is completed. `--unshallow`
 +does not fetch all remaining refs from source repository.

 I do not think this Note is being as helpful as it could be.

  - If the repository was created with --single-branch but if the
user later fetched and started tracking other branches, the
statement only one ref is completed is untrue; the true version
is only the existing refs are completed, which leads to a more
important point.  It says the same thing as all existing refs
above and does not add any useful information.

  - The last sentence is less than useful but merely frustrating---it
says what you cannot do with this option, strongly hints that the
writer of the sentence knows what the reader wants to achieve,
but without saying what other way the reader go to achieve it.

 Perhaps replace that Note paragraph with something along this line?

 +
 By fetching and tracking refs that you haven't been tracking,
 you can add these new refs to all refs to be unshallowed.

 It was meant to emphasize --unshallow would not create a true clone,
 if people miss the keywords all existing refs.. Maybe..

I know; it is not helpful to describe what it does *NOT* do, without
saying what the reader is likely trying to find out.

 You may need to fetch and track other refs from the source repository
 if you want to make full clone.

That is much better.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: git clone --depth: shallow clone problems

2015-05-26 Thread Duy Nguyen
On Thu, Apr 23, 2015 at 04:53:04PM +0200, Michal Pomorski wrote:
 tl: skip to the second paragraph
 
 So here is what I just experienced:
 We had an emergency error in an application at work and as the
 responsible developer was unavailable, I was asked to check it out and
 look into it.
 We are a small branch of a bigger company and our connection to the
 company's source servers is really slow, so just to quickly start it
 up, I decided to take a shallow clone (that's what it is for, right?).
 After a while we realized, the clone I have made was not sufficient
 and was missing some newest work done on the project.
 I did git fetch --unshallow which finished surprisingly quickly, and
 it did not bring any newer commits.
 Unaware of the fine print hiding in the documentation of git clone, I
 blamed the repo (and in extension the person who provided me the
 address to it). After coming to a realization, a process which cost me
 time and embarrassment, I understood what is supposed to be the
 correct behaviour:
 --single-branch
 Clone only the history leading to the tip of a single branch, either
 specified by the --branch option or the primary branch remote's HEAD
 points at. When creating a shallow clone with the --depth option, this
 is the default, unless --no-single-branch is given to fetch the
 histories near the tips of all branches.
 Of course, the new commits were put on a custom branch, and I knew
 that all the time, but I expected the branch to show up eventually, at
 least after git fetch --unshallow.
 

 I hope you can see the faults in the usability of the commands I was
 exposed to:
 1) git clone --depth  should:
-warn about only fetching the current HEAD (name it by a real name
 if applicable)
 and/or
-require the --branch option so that it is not left to chance
 (current HEAD could be anything; is it really meaningful to talk about
 the current HEAD on a server?)
 and/or
-make the --no-single-branch the default...
 and maybe
-have the option to clone the most recent commits.

--single-branch being the default was because we (at least I, stilll)
believed it was the common case, so I don't think we should revert
it. But I can see --unshallow documentation is misleading. How about
this? I think it's better than what we have.

-- 8 --
Subject: [PATCH] fetch-options.txt: clarify what --unshallow does

Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
---
 Documentation/fetch-options.txt | 11 ---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 45583d8..63d3452 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -14,12 +14,17 @@
branch history. Tags for the deepened commits are not fetched.
 
 --unshallow::
-   If the source repository is complete, convert a shallow
-   repository to a complete one, removing all the limitations
+   If the source repository is complete, convert all shallow
+   refs to complete ones, removing all the limitations
imposed by shallow repositories.
 +
 If the source repository is shallow, fetch as much as possible so that
-the current repository has the same history as the source repository.
+the all existing refs of current repository have the same history as in
+the source repository.
++
+Note that if the repository is created with --single-branch, which is
+default for a shallow clone, only one ref is completed. `--unshallow`
+does not fetch all remaining refs from source repository.
 
 --update-shallow::
By default when fetching from a shallow repository,
-- 
2.3.0.rc1.137.g477eb31
-- 8 --

 2) git fetch --unshallow should convert the clone into an actual
 equivalent of a normal, not shallow clone.

I was thinking of some way to undo --single-branch too. I don't think
it should be the job of --unshallow, maybe a new option, but I can't
think of a name better than --really-unshallow :P

It's been a while and no one responds to this, perhaps people are not
interested in such an option?

 3) The documentation should be improved. The behaviour of --shallow is
 described partly in the description of --no-single-branch. This is the
 documentation equivalent of the infamous come from control flow
 structure.

Yes. Like this?

-- 8 --
Subject: [PATCH] clone.txt: mention --single-branch in --depth

Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
---
 Documentation/git-clone.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index f1f2a3f..9c320da 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -185,7 +185,9 @@ objects from the source repository into a pack in the 
cloned repository.
 
 --depth depth::
Create a 'shallow' clone with a history truncated to the
-   specified number of revisions.
+   specified number of revisions. --single-branch is
+   

Re: git clone --depth: shallow clone problems

2015-05-26 Thread Junio C Hamano
Duy Nguyen pclo...@gmail.com writes:

  --unshallow::
 - If the source repository is complete, convert a shallow
 - repository to a complete one, removing all the limitations
 + If the source repository is complete, convert all shallow
 + refs to complete ones, removing all the limitations

Define shallow ref, or better yet explain without introducing such
a new term (I do not think shallow-ness is a property of a ref, by
the way---I think you meant all refs that can reach the points the
history is cauterised by .git/shallow, but we shouldn't assume that
the target audience of this paragraph to know Git as well as I do).

   imposed by shallow repositories.
  +
  If the source repository is shallow, fetch as much as possible so that
 -the current repository has the same history as the source repository.
 +the all existing refs of current repository have the same history as in
 +the source repository.

Makes sense, modulo so that the all existing refs sounds strange
to my ears (all the existing refs perhaps).

 ++
 +Note that if the repository is created with --single-branch, which is
 +default for a shallow clone, only one ref is completed. `--unshallow`
 +does not fetch all remaining refs from source repository.

I do not think this Note is being as helpful as it could be.

 - If the repository was created with --single-branch but if the
   user later fetched and started tracking other branches, the
   statement only one ref is completed is untrue; the true version
   is only the existing refs are completed, which leads to a more
   important point.  It says the same thing as all existing refs
   above and does not add any useful information.

 - The last sentence is less than useful but merely frustrating---it
   says what you cannot do with this option, strongly hints that the
   writer of the sentence knows what the reader wants to achieve,
   but without saying what other way the reader go to achieve it.

Perhaps replace that Note paragraph with something along this line?

+
By fetching and tracking refs that you haven't been tracking,
you can add these new refs to all refs to be unshallowed.

 2) git fetch --unshallow should convert the clone into an actual
 equivalent of a normal, not shallow clone.

 I was thinking of some way to undo --single-branch too. I don't think
 it should be the job of --unshallow, maybe a new option, but I can't
 think of a name better than --really-unshallow :P

Isn't that just the matter of updating remote.origin.fetch?  I do
not think it belongs to clone (or fetch).  Perhaps it belongs to
remote, where it already shows with git remote -v what is
fetched and pushed.

  --depth depth::
   Create a 'shallow' clone with a history truncated to the
 - specified number of revisions.
 + specified number of revisions. --single-branch is
 + automatically specified unless the user overrides it with
 + --no-single-branch

Yeah, something like that would be a definite improvement.

By the way, while composing this message, I scratched my head after
typing

$ git clone --shallow=4 --no-local ./git.git ./playpen

Is it just me or do we want to add such a synonym?

Thanks.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


git clone --depth: shallow clone problems

2015-04-23 Thread Michal Pomorski
tl: skip to the second paragraph

So here is what I just experienced:
We had an emergency error in an application at work and as the
responsible developer was unavailable, I was asked to check it out and
look into it.
We are a small branch of a bigger company and our connection to the
company's source servers is really slow, so just to quickly start it
up, I decided to take a shallow clone (that's what it is for, right?).
After a while we realized, the clone I have made was not sufficient
and was missing some newest work done on the project.
I did git fetch --unshallow which finished surprisingly quickly, and
it did not bring any newer commits.
Unaware of the fine print hiding in the documentation of git clone, I
blamed the repo (and in extension the person who provided me the
address to it). After coming to a realization, a process which cost me
time and embarrassment, I understood what is supposed to be the
correct behaviour:
--single-branch
Clone only the history leading to the tip of a single branch, either
specified by the --branch option or the primary branch remote's HEAD
points at. When creating a shallow clone with the --depth option, this
is the default, unless --no-single-branch is given to fetch the
histories near the tips of all branches.
Of course, the new commits were put on a custom branch, and I knew
that all the time, but I expected the branch to show up eventually, at
least after git fetch --unshallow.


I hope you can see the faults in the usability of the commands I was exposed to:
1) git clone --depth  should:
   -warn about only fetching the current HEAD (name it by a real name
if applicable)
and/or
   -require the --branch option so that it is not left to chance
(current HEAD could be anything; is it really meaningful to talk about
the current HEAD on a server?)
and/or
   -make the --no-single-branch the default...
and maybe
   -have the option to clone the most recent commits.

2) git fetch --unshallow should convert the clone into an actual
equivalent of a normal, not shallow clone.

3) The documentation should be improved. The behaviour of --shallow is
described partly in the description of --no-single-branch. This is the
documentation equivalent of the infamous come from control flow
structure.

Regards,
Michal Pomorski
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html