2015-02-26 37 views
0

После поиска в поисковых системах за пару часов я нашел ответ на свой вопрос. Я знаю, что этот пост Undo checkout TFS отвечает на мой вопрос, однако он не отвечает на все мои вопросы. Я хочу достичь той же цели, о которой спрашивал пост. Как только вернуть файлы, которые были извлечены, если в этом файле ничего не было изменено? Ответ на мой вопрос не должен быть слишком сложным для ответа.Отключить файл tfs программно, если он не был изменен с помощью C#

Так что я делаю это копирование файлов с сервера и их перезапись в локальной рабочей области. Я проверяю все файлы, которые копируются. Однако, если файл, который был скопирован, в любом случае не изменяется (файл сервера и целевой файл точно такие же), я бы хотел отменить проверку этого файла.

Я знаю, что я должен использовать рабочее пространство. Метод Ундо() и джентльмен сказали, что это сработало для него. Однако он не показал, как он его реализовал.

Вот код, я с помощью ссылки:

public static void CheckOutFromTFS(string filepath) 
{ 
    var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(filepath); 
    if (workspaceInfo == null) 
    { 
     return; 
    } 
    var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri); 
    var workspace = workspaceInfo.GetWorkspace(server); 
    workspace.PendEdit(filepath); 
} 

Ответ дал, чтобы использовать метод workspace.Undo(). Как добавить этот метод в последнюю строку в CheckOutFromTFS()?

public static void CheckOutFromTFS(string filepath) 
{ 
    var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(filepath); 
    if (workspaceInfo == null) 
    { 
     return; 
    } 
    var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri); 
    var workspace = workspaceInfo.GetWorkspace(server); 
    workspace.PendEdit(filepath); 
    workspace.Undo(); 
} 

Или это делается по-другому? Я не уверен, что этот Undo() будет только возвращать файлы, если нет изменений или просто полностью отменяет оформление и рендерит PendEdit() бесполезно. Может кто-то помочь прояснить это для меня?

+0

как же вы не можете просто использовать IDE, если вы подключены к используя TFS для выполнения изменений отмены вручную.просто любопытно .. потому что функциональность уже существует и работает. – MethodMan

+0

Мой план состоит в том, чтобы просто использовать это маленькое исполняемое приложение, чтобы скопировать файлы и автоматически проверить файлы, которые были изменены, и позволить пользователю протестировать. Я не хочу, чтобы пользователь должен был открыть среду IDE, чтобы вручную отключить файлы. Просто пытаясь спасти их некоторое время. – itsNino91

+0

Мне было просто любопытно .. спасибо за разъяснение – MethodMan

ответ

0

Если вы используете локальную рабочую область, тогда весь файл, который не имеет никаких изменений, автоматически вернется к откату. Вам не нужно ничего делать. Это работает с VS 2012 или лучше с TFS 2012 или лучше. Вам нужно преобразовать вам рабочее место в локальной рабочей области первого, как этот

enter image description here

+0

Так что tfs достаточно умен, что после запуска функции pendEdit он будет знать, был ли файл изменен, и если он не будет автоматически деинсталлировать файл? Пользователь должен иметь рабочее пространство, отображаемое локально, чтобы это приложение работало. – itsNino91

0

Так что я нашел ответ на мой вопрос в различных должностях. Я как бы взял кусочки кусочков и объединил их, чтобы получить мое рабочее решение. Использование функции Undo() с передачей в пути к файлу фактически отменяет выбор файла независимо от того, был ли он изменен или нет. Мое рабочее пространство было также локальным, но VS и TFS не могли автоматически вернуть эти неизмененные файлы для меня, поэтому я взял подход ниже.

Итак, я решил использовать команду «uu» Team Foundation Power Tools для отмены изменений неизмененных файлов в рабочей области. Я создал пакетный файл и ввел следующую команду: echo y | tfpt uu . /noget /recursive. Поскольку мы не будем отображать оболочку во время выполнения, я использовал команду «echo y» для автоматического ответа на вопрос: «Вы хотите отменить эти избыточные ожидающие изменения? (Y/N)». Включение/noget настоятельно рекомендуется, так как оно предотвращает принудительное «получение последних» всех файлов вашего проекта, которое в зависимости от общего числа может занять очень долгое время.

var startInfo = new System.Diagnostics.ProcessStartInfo 
{ 
    WorkingDirectory = projectRoot, 
    FileName = projectRoot + @"\undoUnchanged.bat", 
    UseShellExecute = false, 
    CreateNoWindow = true 
}; 
Process process = Process.Start(startInfo); 
process.WaitForExit(); 
process.Close(); 

После выполнения сценария и process.Close() выполняет вас и дважды проверьте, если ваши неизмененные файлы на самом деле были непроверенный путем нажатия на кнопку обновления в окне Team Explorer, в вашем проекте. Надеюсь, кто-то другой найдет в этом какую-то пользу.

0

Если я правильно понял вопрос хорошо, и вы на самом деле нужно отменить с помощью C# код позади, я считаю, что это Шоул поможет вам:

Undo checkout TFS