Removing a file from versioning but keeping it locally? - mercurial

What is the hg command for removing a file from versioning but keeping it locally? I can do hg remove but that will also remove the file locally. It's the SDK files that I don't want to version.

The command you are looking for is hg forget.

Related

How to Hg Shelve Added files uncommitted yet

I am using Mercurial Shelve extension to shelve changes from command line. It works nice except when the changes that i like to shelve contain new added files(a) in working directory. Basically, it shelves everything except the new added files. I checked this by looking at the .hg/shelve stored changes.
How to shelve new added files (a status)?
This response is overdue, but you can use the following command to shelve all files (track / untrack) :
hg shelve -A
or
hg shelve --addremove
About this command, documentation says :
mark new/missing files as added/removed before shelving
You must pay attention by using this feature because after unshelving, your old untracked files are track.
These file are already to be commited in the last commit if no files are specified in hg commit command. You should use hg forget if you want untracked them again.
I assume you are talking about currently untracked files? You need to add the first.
So just do hg add for your new files and then hg shelve will also shelve them.
Thank you Tom. I am using Mac, so it didn't really worked. What did work was another mercurial extension 'hgattic' about which you can read more in my blog
http://margotskapacs.com/2012/10/shelving-uncommitted-changes-in-mercurial/
(see section 'Bug – Added Files Unable Shelve')
If the command line isn't absolutely necessary:
then just type (on Linux)
thg shelve
This allows you to easily shelve added (but not yet committed) files.
As a mostly Git user, I find Atlassian SourceTree the easiest way to deal with the odd Mercurial repo that I have to work with. It has shelving built in. The price is right, too (free).
Disclaimer: I work for Atlassian

Why are my dlls not included in my exported patches?

I have used TortoiseHg to export a few changesets from a Mercurial repository.
This went fine, except that the SignalR dlls were not included in the patch of the changeset where I added those dlls.
Why are they not being included? If I look at the changeset on my machine, I can see the dlls are added in the changeset.
How can I add these dlls to the patch!?
I installed SignalR through nuget.
Thanks in advance.
EDIT: I also noticed that another change to a file is also not included in the patch of that changeset.
EDIT: When I open the patch in notepad++, I saw mention of the files:
diff -r b10c68a2d387 -r 74aa5e71d315 MyProject/_sln/packages/SignalR.Server.0.5.3/lib/net40/SignalR.dll
Binary file MyProject/_sln/packages/SignalR.Server.0.5.3/lib/net40/SignalR.dll has changed
It looks like you're not passing the --git option to hg export. Without --git hg export will not include changes to binary files (or permissions, etc).
Personally, I think this should be the default now for everything that produces a diff in some form, but it's still not.
File -> Settings

Why I can't get files when I use hgsubversion to import SVN code?

I am a new guy in using Mercurial to maintain my code editions. My company's server is using SVN and I want to maintain my local repository, so I am commit into my Hg when I have a little change to my code. After testing my code carefully, then I can push back my code into SVN server.
I install TortoiseHg and I can clone other open source project to my computer. And I have HgSubversion plugin installed correctly.
Right now I can do the clone operation using following commands:
$ hg clone svn+https://XXXX:8443 test
But after the clone is finished, there is just a folder .hg under test folder.
Why this happen? How can I fix it?
Thanks
Water Lin
It might has some files which stored with non-ascii file name in repository. Mercurial can't treats non-ascii file name correctly so far. Have you tried to check out the log? You can do it with command "hg log" to make sure all files had been imported in to Mercurial. Then download and install the extention fixutf8. That can fix the problem. After you install fixutf8 you can update current working folder to tip reversion again.

How do I remove all Java class files from my entire project history in Mercurial?

When I started my Mercurial project I forgot to exclude everything under my target/classes directory, such as:
target/classes/com/mypackage/MyClass.class
Now these binary files are causing conflicts when I do a hg update.
Is there a single command that would allow me to delete all of these files from the entire project history?
Or, if not, is there a command that would allow me to remove them one file at a time?
If you just want to remove files from last revision, remove files from disk and use hg addremove or hg remove --after target/classes/com/mypackage/*.class to inform Mercurial about your deletion.
If you want to permanently remove all class files from you entire history use hg convert and --filemap option to rewrite your repository and get rid of files from all revisions. However this solution alters revision ids. In multi user environment it may cause some problems because it creates a new repository effectively.
If you delete the files in question then do hg addremove then the files will be removed from the repository. However they will still be in the history though, but is that really a problem?
Use hg remove --after target/classes/com/mypackage/*.class. (--after will avoid deleting the on-disk files).

Mercurial - How to remove a file from version control?

So I accidentally included a config file (different for each machine) into our mercurial repositories.
How can I get Mercurial to not include it in version control? I don't want to delete the file since I still want it. And I don't want to cause the file to get deleted on other developer's working directories either.
And how do I do this in TortoiseHG?
Right click on the file -> TortoiseHG -> Forget Files. Click Forget. Commit and Sync.
Edit:
You'll also want to add the path to your .hgignore to keep it from getting added again. You can right click on the file in the HG Commit dialog and choose to ignore it.
Here's the manual way of doing it through the command line:
Copy the config file somewhere outside of the repository.
Run hg rm path/to/config/file
Add the config file path to your .hgignore.
Commit the repository.
Move the config file back to where you had it.
Do an hg stat on your repository to double check you did everything right. (It shouldn't show up in the list of modified/added files).
Edit:
hg forget is the best way to do this.
Run hg forget path/to/config/file
Edit your .hgignore and add the path to the config file.
hg ci to save your changes.
Run hg stat to ensure everything worked according to plan.
See nates answer for how to do it TortoiseHG.
hg remove or hg remove -f?
I think hg forget also removes it from the branch.
In both cases, files are retained in your directory.
For those using SourceTree, there is an option Stop Tracking when you right click a file, it basically does the same thing as hg forget or git rm --cache, removing the file from repo but not from hard disk.
add it to your ignore list.
See the .hgignore file.
TortoiseHG gives you access to this config file via the "Edit Ignore Filter" menu option.