what does cvs update actually do in version control flow? - version-control

Assume there are two PC PC_A and PC_B and a cvs repository.
PC_A and PC_B have the same code as in repo.
Now I wrote some code on PC_A and check in ,then I cvs diff on PC_B ,it says no difference and the code is old.But it will change when I do cvs udpate?
My question is why cvs update exist and what really cvs update do ?

Yes, it will attempt to update your working directory. If you don't want that, create a branch.

Cvs diff will compare your code against the version you currently have checked out. (Ie, cvs diff does not show you what the differences are to what PC_A just checked in, it will only show you what files you have changed locally but not yet checked in.
cvs update will update both your local copy and the 'version' to give you any new checked in changes. ie, what PC_A just did. If the file hasn't been modified locally, it will update it. If it has been modified, it will attempt to "merge" the two files together, but if it can't then it will say that the file is conflicting and you have to do it manually.

Related

In CVS how to ignore a file which is already checked in

In our CVS (not git!) repo I have a file which I checked in a while ago. Now we have decided not to keep it in version control.
How can I keep the file in my local directory but tell CVS not to store it? Just adding it to .cvsignore (obviously) doesn't do the trick.
As #tripleee mentioned in the comments, the following works:
Move the file in question out of the repository (but don't delete it).
Check in the removal of the file.
Commit the change to CVS.
Move the file back into its location the repo.
Add it to the appropriate .cvsignore file.
Done.

mercurialeclipse not showing complete history

I've shuffled things around, moving my files to another directory. Now when I click Show History, I only see the branch that I moved the files in.
I'm using eclipse neon, latest version of the mercuraleclipse plugin.
Here are the changes I made. There are old projects that have the source (.java) files in the top-level. So I created a src directory and used hg move to move the files under src. Once I did this, when I click on a file to see the history, It only shows the one change in the new mercurial branch I made the change in.
First thing that comes to mind is which version of MercurialEclipse are you using?
I'm asking because I have solved this very issue a few months ago in the official MercurialEclipse repository. The fix required also making a small change to the library that hgE uses, namely javahg.
Also, maybe that it'll help to have this in your .hgrc file (this file is in C:\Users\theUserName on my Windows 8.1 system. Please, refer to the Mercurial documentation for other systems)
[defaults]
log = -f
addremove = --similarity 100
commit = -A
I'm not sure that log = -f is pertinent to this issue but I have these lines in my file. I can't believe I didn't comment each of these so as to know why each is necessary or useful. Since the fix on August 31, commit = -A is no longer necessary , but I keep it in the file just in case I use hg on the command line.
As a rule of thumb, you may also check directly on the command line whether any problem you encounter with hgE also shows up with hg. That will provide the team as a whole with some useful insight.
Make sure that you use a build of hgE from after that date. If you still have this problem later on, please open an issue on the BitBucket tracker with as many details as possible. I'll fix the problem and we'll update this question with the solution/answer.

Subclipse SVN first commit ignore certain directories

Decided to take the jump from CVS to SVN.
I setup a new repository in subclipse for my project. When I go to 'Finish' the setup it wants to do an initial commit and presents me with a flat list of files to select the files for version controlling.
The problem is I have thousands of generated binary files I dont want to commit.
So I click on cancel because it would take me all day to go through and unselect all the unwanted files. Annoyingly when I click on a parent category for the files I want to ignore it is not recursive!
So I click cancel then go to the eclipse directory structure for the project and manually set svn:ignore on all directories I want to ignore. Then I try and do a commit again and all the files are once again presented - ignore seems to have done nothing.
Can anybody point out what I might be doing wrong?
For the first commit, I recommend writing a small script to delete (of course you'll have a backup) all the files that are not meant to be committed.
Afterwards, if you find you accidentally committed a file, you can
svn delete file
Upon the first checkout, copy back (or better yet, regenerate) all the binary files. This will trigger svn to notice that your local repository is out-of-sync with the remote repository.
cd <Root of local repository>
svn status
You will see lots of "to be added" items. Go to the parent directory and add in svn:ignore properties for each of the generated items.
cd build
svn propedit svn:ignore .
which will open an editor (if it doesn't, you need to set the environmental variable SVN_EDITOR to a suitable editor). Then you can add in entries that svn will know are not tracked.
(in the ignore property editor)
target
build
image*
*.o
(and so on)
Save the file, and it will be staged for the next commit. Subsequent runs of svn status will no longer show these files as "needing to be added", but they will show the directory as "needing to be committed (it's a revision on the directory)"
Quick Aside
So I'm not entirely certain exactly which functionality of Subclipse you were using in order to create a repo and share a project to it, I'm assuming you created like a file based repo through the eclipse SVN repo view and tried to share and then commit to it. It looks like your problem got solved but I did want to add an answer on here because I ran across this post looking for the answer to this same problem of handling initial commits even just in general with SVN and wanted to offer help to anyone else looking for the help.
Intro
To start off I would recommend not working through an IDE extension like this just for the initial commit as they can miss a lot of the options for handling opening a repo in SVN. I personally really like the command line form of SVN to work with but TortoiseSVN is a good option for a GUI.
Whether you create a local file-based repo or are connecting to an SVN server and you want better control over your first commit in an previously unversioned project here is what I've found as the best general workflow for doing so.
Create the remote folder to save to.
On command line this will be:
$> svn mkdir your-url-scheme://your-site-address.domain/path/to/repo/example-directory
Or on TortoiseSVN open your repo for browsing, right click, and select "create new folder"
This will give you a location in the SVN repo to checkout from for our next step.
Checkout in to the already started project
Make sure to use the empty, newly created folder in your repo to checkout with. SVN does not actually require a folder being checked out to to be empty, which is an important part of what makes it actually very flexible and able to subsume parts of your directory into it fairly easily if used correctly.
Now you will checkout this empty folder into the root folder of your already started project. This will add your project to the working copy of this folder without any commit being made yet. The command is:
$> svn co your-url-scheme://your-site-address.domain/path/to/repo/example-directory /your/projects/root/
"co" standing for checkout. In Tortoise svn you can right click on or in the empty repo folder and select "checkout..." and then select the project root.
Set ignores and commit
Finally, you can easily set your ignores on certain files before adding any other files to the tree using the command:
$> svn propset svn:ignore file-or-directory-to-ignore
And to add all non-ignored directories and files:
$> svn add * --force
The force is technically unnecessary in this case but ensures full recursion. You can also now do all of this in your file explorer if using TortoiseSVN or you can even use your IDE extensions to do this at this point(make sure to ignore all files you need to before mass-adding files for commit), all that's left is to make sure to commit the newly added files to the repo and you're up and running with source control :)
Added this method here simply because this method allows you to avoid any unnecessary copying of those stinky binaries that no one wants to lug around with them.

cvs: updates fail to merge

I've just discovered, a surprising for me behavior of cvs.
I change file1 localy
During this time people change other unrelated parts of the same file, and commit to the repository
I update my local copy from repository
At this point I expect my local copy of file1 to contain all changes made by others to this file, unless the update above reported a conflict. However, when I do now diff with head, I discover lot's of differences coming from changes made by others in parts of the file that I did not touch at all.
Any ideas? Is this just the limited abilities of cvs to merge? Any wrong setting? Something in my workflow?
CVS has very limited merge facilities. Switch to a modern system such as Git (perhaps via git-cvsimport if the repo maintainer is uncooperative) if you want a better merge experience. See also Best practices for using git with CVS
The final solution is :
1. Save your local code to another place manually
2. Revert the files which may has conflict to the HEAD (most latest) version on CVS server.
3. Add back your change to the Reverted file.
The concept for above solution is to CLEAR UP all the possible issue by REVERT and get a 100% clean version from repository then add back our changes.
It can resolve below issues which caused by code out of date / code base messed up.
CVS commit had a conflict and has not been modified
CVS update failed
CVS not sync

CVS I have add a file in the wrong place? Should I remove it?

I work on two CVS branches simultaneously. And now I have added a file in branch_1 instead of branch_2. How to "UNDO" the cvs add operation. Actually, does it change something on repository, or just locally in CVS directory?
You can use the cvs remove command.
I think that if you haven't committed yet, your addition/removal won't even appear in the repo history, otherwise you will see it but the file won't be there anymore.
And if you haven't committed, a cvs update -C should do the trick also, as the cvs add command marks files for addition but they are really added with the next commit.