我正在尝试以编程方式编辑已签入的文件,然后将其签出并保存在签入时所做的更改。然后使用保存的更改将其重新检入: 编辑 - > CheckOut - >保存 - >签入
尝试保存时,我遇到的问题是该文件无法识别文件夹中的文件,并认为它试图覆盖另一个文件。
void checkOut(string sourcefile)
{
ClearCase.CCElement element = m_CC.get_Element(sourcefile);
if (element != null)
{
ClearCase.CCVersion latestVersion = null;
FileInfo fi = new FileInfo(sourcefile);
latestVersion = element.get_Version();
if (latestVersion != null)
{
ClearCase.CCBranch branch = latestVersion.Branch;
ClearCase.CCCheckedOutFile file = latestVersion.CheckOut(ClearCase.CCReservedState.ccReserved, "", false, ClearCase.CCVersionToCheckOut.ccVersion_SpecificVersion, true, false);
string path = file.ExtendedPath;
}
}
}
void checkIn(string sourcefile)
{
ClearCase.CCElement element = m_CC.get_Element(sourcefile);
element.CheckedOutFile.CheckIn("", true, sourcefile, ClearCase.CCKeepState.ccRemove);
}
void excelEdit()
{
string fileName = Globals.ThisAddIn.Application.ActiveWorkbook.Name;
//EDIT EXCEL FILE from (fileName)
checkOut(fileName);
Globals.ThisAddIn.Application.ActiveWorkbook.SaveAs(fileName);
checkIn(fileName);
}
答案 0 :(得分:3)
如果您手动执行此操作,那么这不是您将要使用的过程,而不是我建议以编程方式执行的过程。
你应该首先检查文件(这会使它在磁盘上可写),编辑它,保存它,然后检查它IN(这将使它在磁盘上只读)。
您可能认为在Visual Studio中,您在签出之前就开始编辑,但实际上,Visual Studio会在您开始编辑时检查该文件。
答案 1 :(得分:2)
我的印象是ClearCase通过用新的可写副本替换当前的只读副本来检出文件。这可以解释你所看到的行为。
我建议您将文件复制到临时位置,修改副本,检出原始文件,复制已修改的临时文件并将其签入。
答案 2 :(得分:2)
注意:可以使用快照视图执行您想要的操作,您可以:
–use/hijack
指示结帐使用被劫持的文件作为签出版本 如果要检出的文件没有被劫持的对应文件,则会以静默方式忽略此选项。
当你想立即测试修改时,该过程是有意义的,而不必告诉每个人你正在修改所述文件:如果修改有效,那么你尝试签出,然后签入。
但是对于动态视图,这是不可能的(或者更难)。
因此,除非您有非常具体的理由在结帐前尝试修改,否则official process所描述的Steve更可取。
答案 3 :(得分:0)
如果ClearCase与TFS类似,您可能会将文件设置为ReadOnly,直到您结帐...
因此,您的流程实际上必须设置文件为不只读 - >编辑 - >退房 - >保存 - >入住