I just signed up for Team Foundation Services Cloud Service since I've failed to implement TFS on my server and local machine. I want to change the source provider from the previous TFS system I abandoned to the new cloud one. It still refers to the old one. I've gone through all the options available, including running a program off of CodePlex that will remove source control bindings. For some reason, it refuses to allow me to unmap my source control from the old server and bind it to the new TFS cloud service. Why?
EDIT: I noticed there are some invisible .SUO files in my project directories. Is this where TFS 2012 stores it's settings? I deleted these files and somehow I was able to map my source to the new server. There were work spaces that appeared when I ran TFS from the command line that didn't appear in the in VS.
I tried everything including uninstalling TFS server locally and removing all traces of the old server connection info on my system and I still couldn't get it to switch to another server. It was like a pit bull that wouldn't let go. I had the taught that Microsoft wanted to make their TFS look less cluttered by hiding its ugly plumbing in invisible folders like Git and Mercurial. Sure enough, there were SUO files hidden in my directory and subfolders. I recursively deleted all them and was able to connect to the new server.
The following command should recursively remove all hidden SUO files from your solution folder:
del /S /A:H *.suo
Related
Task: A fresh fetch of TFS branch source takes 12+ hours to download due to latency on the VPN (everyone working from home). A in office local fetch takes 7 minutes to a SSD drive.
If we manually ZIP the files via an office VM and upload to home, an unzip, this can happen in less than 30m. We use an on premise TFS 2019 server.
Problem: Visual Studio shows "not downloaded" and requires a fresh fetch. I want to be able to tell TFS manually that the server and local copy is in SYNC... I did some research and came up empty.
I looked at the "reconcile" tf option but that just then wants to download the files.
So does anyone know a magic way to keep Visual Studio happy to show
Latest" Yes ?
03-Nov NB: My context was TFVC
TFS - Sync server to local manually
You could create a new folder to connect the repo, and we do not have to wait until the clone is completed (it will take you a long time), you can choose to cancel:
Then delete the files in the new folder.
Next, copy the latest repo folder from your office VM, then add files to the new folder.
Close your Visual Studio and re-open it, make any change in the projects, then we could sync it to the repo.
This relates to question,
TFS checkin error - could not find file
"When checking in my project I get the error:
Could not find file 'C\blah blah blah'.
I have a feeling this might be a file from an old project I deleted.
I have tried deleting my TFS connection and workspaces.
The Solution was:
This will happen when TFS has some changes staged that no longer exist on the file system. For instance, if you add some files in Visual Studio (which adds them to the changes list), delete them directly from the file system, then attempt to check in the changes, it will complain that it could not find the file(s).
To remove these changes from the list, you can open Source Control Explorer (View > Other Windows > Source Control Explorer) and either Delete the nonexistent files or right-click on the offending files and Undo Pending Changes.
You can also undo these specific changes from the Pending Changes panel in Team Explorer.
Follow up Question:
So my question is,
how do I conduct the equivalent of this in the TFS Server? It continuously happens multiple times on our team.
This works on a person's desktop, but whats the equivalent commandline in the TFS server, and can I incorporate this in my build steps?
You delete files from TFS in the wrong way. the TFS server doesn't know your local file system, if you deleted a file from your local folder the file still exists on TFS.
This is the reason for the issues and errors. if a developer wants to delete a file and he deleted the file from the local folder and then got the error Could not find file and to solve it he does "Undo pending changes" so the file still exists on TFS and when another developer see the file in his system he also deleted it locally and he also will get the error in the check-in.
So, if a developer wants to delete a file from TFS he needs to right-click on the file and "Delete" and "check-in". if he already deleted it locally he can do the "delete nonexistent files" and "check-in". now each developer when he does "Get latest" not will get the file.
You can also delete files with a tf.exe command line in the delete command:
tf delete [/lock:(none|checkin|checkout)] [/recursive] [/login:username,[password]] itemspec
During the build, you can add a command line/Power Shell task and run the tf.exe.
You can undo another person's changes from the commandline using:
tf vc undo /workspace:workspacename;owner $/project/path/to/file
You can get this information by calling:
tf vc status $/project/path/to/file /user:*
This allows you to remove pending changes from the server, though it won't cause the files to be reverted on the workstation of the developer in question.
Both commands offer a /recursive option to undo multiple files under a specific path at once.
If you're using Visual Studio 2015 or earlier, then you can use the TFS Power Tools to add a "Find by status" option to the Visual Studio Source Control Explorer. This has unfortunately not made it into Visual Studio 2017 and there are no TFS Power Tools for Visual Studio 2017.
The TFS Sidekicks offer a Status Sidekick screen, which allows you to query all files currently checked out for edit in server workspaces and allow you to undo them centrally.
Preventing the issue altogether
To prevent the issue altogether you have a few options. You can switch to Local workspaces, instead of server workspaces. Those auto-detect local changes and don't register changes on the TFS server itself. Read more about local workspaces.
You can perform the deletes from the tf vc command line instead of using other tools to delete files and folders, for example:
tf vc delete $/project/path/to/file
The delete command also has a /recursive option. Using this command will not only update your local folder, but will also update the server workspace.
I am trying to provide a lot of context below for this problem so that experienced people can read the symptoms. I expect more questions will need answering to get to the bottom of it.
The short form of this question is how do I remove the source control history from a project in Delphi? (The local project folder) After removing the .svn and .local directories Delphi still wont svn import. There is nothing in the repository. This seems to be a problem with the Delphi integration. Some local caching of activity that does not seem to be relying on the repository for information.
Longer form: I recently setup the Delphi XE3 included subversion client and server. It is running as a service on Windows. The setup was done with sc as per the svn-book.
I successfully figured it all out by trial and error. With a fair bit of error over the last few days.
In trying to clean up my source code and repositories to get to a clean install I found that I needed to remove repositories from the server and re-create them. I also thought if I removed the .svn directories from the source that it would remove all traces of source control. This did not work. So I tried to additionally remove the .local files, which do have some version history in them.
When I load the project group and switch to the import tab, I still see recent comments showing my initial commit.
In addition when I try to Import a dialog comes up saying one of my big key .pas files is already under version control. Another file, a dproj file it says is not under version control. When I check the repo with
svn ls
some folders got made, but there are no files in the repository.
The config file is setup such that I should need to supply a password. It never asks for one. I just left the default security in place because I dont need to concern myself with it much. Just enough to stop mistakes. It is on a local network. SVN Import didnt require it either.
I can manually add files with svn import. I am using the svn: protocol prefix with svnserve.exe running as a service. Authentication is default. It works without passwords for some reason. It shouldnt do that.
svnserve.conf has the following: (comments omitted for bevity)
[general]
anon-access = none
auth-access = write
password-db = D:\SVNRepos\conf\passwd
realm = Root
force-username-case = none
svn --Version says:
svn, version 1.7.5 (r1336830)
compiled May 11 2012, 02:21:17
At first, SVN is not CVS. While CVS is legacy system with many problems, SVN is a modern centralized version-control system (git fans may disagree, but this is another topic).
Subversion 1.7 is out of date and no longer supported. The current release is Subversion 1.9 and it has many improvements compared with 1.7. SVN 1.8 is still supported as well. Therefore, you should definitely upgrade your client and server to the latest version.
Returning to your problem: you haven't specified any errors that you get in Delphi XE3 IDE. Do you get any?
When you svn add files in Subversion working copy, you schedule them to be committed next time you run svn commit. So there is a chance that you haven't actually committed them to the repository.
If your code was already imported to Subversion repository, then it has to be there. Double-check this with svn ls -r <URL> again. Then you could checkout a working copy using svn checkout <URL>.
BTW, .local files do not relate to Subversion. These seem to be some project files of the IDE, but I'm not sure.
And if you have issues with Subversion server setup on Windows, there are packages that should help you. See the binary packages page.
Here is the use-case. There is a very large file in the TFS branch, let's say it is 50GB. When I try to get this specific file with a command line similar to this:
tf get $/Branch/very-large-file.dat
The operation fails because the required time for the download is larger than the time a VPN would stay connected and of-course TFS is behind a VPN. This is why I have download the file manually using a different approach. Problem is that once the file is in place in my local directory and I check which files need to be updated with the following command:
tf get $/Branch/ /recursive /preview
I see that the very-large-file.dat will be downloaded from TFS. And if I go again with:
tf get $/Branch/very-large-file.dat
This will just create the partial file in the directory and start downloading the file from scratch.
Is there a way to update the local version table on the server, so that TFS knows that I have the file locally without having to download it?
In TFS 2012 lcoal workspaces were added, in which case TFS will recognize the file and will compare it to the server version. In 2010 and earlier, the server will keep a list of files on your workspace stored on the server at all times, which will say that you didn't download the file. The server workspace is also cached on your client. I don't know of a way to tell TFS from the commandline or another simple way the file is up to date.
As a workaround you could 'cloak' the large file to tell TFS you don't want to download it at all.
I have to migrate the shelveset created in one branch say "development" to another say "release".
so that I can directly merge the shelveset then to release which was created for development branch.
the command I have used is:
tfpt unshelve "shelveset name" /migrate /source:"$...development" /target:"$...Release"
it is showing this error:
unable to determine the workspace
Your location from where you launch the command must be from within your workspace.
E.g. c:\workspaces\project\development if that's where your source is located.
I guess you question is: How can I get the job done without this error occurring?.
In that case, make sure both branches are mapped to your local system and a latest version of your source code in you did a get-latest-version.
That should prevent the error from happening, because the paths then both contain information about the workspace used for the mapping.
I ran into the same issue today.
After checking the items below I got it working:
Have only one Powertools installed.
Run the command from a Developer Command Prompt
Run the command from the folder that is mapped to your target workspace.
I had to uninstall v. 2010 so only v. 2012 remained. The version numbers doesn't seem to reference your TFS version.
To check if you are at the correct folder, you can run tf workspace.
In the window that pops up find the workspace that you want to target and check in column Local Folder. Make sure you are in that folder.
I spent good amount of time to get this done and I had few issues to overcome and one of these in fact was
unable to determine the workspace
This particular issue was solved by running the command from source branch root folder. This is contrary to some answers here and on SO in general where they say to use "target" branch - no, use "source":
cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"
Second issue appeared after this. Seem that it couldn't connect to TFS server. what I realized, I have multiple VS installed and connected to different TFS servers. I was using VS12 and I had workspace and server connection. But I didn't realize that same connection needs to be replicated in VS13 for TFPT2013 to work. It connects to same server and workspace.
I also tried doing it using TFPT2015 but I installed it and it didn't install TFPT.exe hence it was useless. So I tried from TFPT2013 to TFS2015 and it worked for this particular command. I wonder, why not, if VS12/13 works fine against TFS2015?
To summarize
Use CMD or DevCMD - doesn't matter
run from source branch root folder
verify Team Explorer Server connection
TF Power Tools 2013 work against TFS v15, at least migrate option works
My first answer explains how to have this done properly using TFPT. In this answer, I want to explain how to do it without TFPT.
Every developer should have multiple workspaces. Because we work on multiple issues simultaneously and we don't want to mix it up. so, you work on one issue in WS1 and another issue in WS2. So, if you unshelve your shelveset in a different workspace, this will do that as well. Because your shelveset can't point to 2 different locations in the same workspace. But in different workspace it will unshelve to a location mapped in that workspace.
I ran into the same problem as Boris Callens. I had installed the TF Power Tools for VS2012 and VS2013. When runing the tfpt.exe command in command promt I always had the error message "unable to determine the workspace". This is because I was using the VS 2012 power tools with TFS 2013. So I had to change the Path to the Power Tools in the System Environment Variable "TFSPowerToolDir" to point to the Power Tools for VS2013.
You can find the version number running: tfpt.exe /?
TF Power Tools version